Skip to content

Latest commit

 

History

History
6819 lines (6814 loc) · 254 KB

a8c289794f759b18.mdx

File metadata and controls

6819 lines (6814 loc) · 254 KB

export const frontMatter = { id: 'tags', title: 'Tags', sidebar_label: 'Tags', description: 'CasualOS has many tags.' }; export const contentTitle = undefined; export const metadata = { "id": "tags", "title": "Tags", "description": "CasualOS has many tags.", "source": "@site/versioned_docs/version-3.1.36/tags.mdx", "sourceDirName": ".", "slug": "/tags", "permalink": "/3.1.36/tags", "draft": false, "unlisted": false, "editUrl": "https://github.com/casual-simulation/casualos/tree/develop/docs/versioned_docs/version-3.1.36/tags.mdx", "tags": [], "version": "3.1.36", "frontMatter": { "id": "tags", "title": "Tags", "sidebar_label": "Tags", "description": "CasualOS has many tags." }, "sidebar": "docs", "previous": { "title": "Security", "permalink": "/3.1.36/learn/records/security" }, "next": { "title": "Listen Tags", "permalink": "/3.1.36/listen-tags" } }; export const assets = {

};

import {Fragment as _Fragment, jsx as _jsx, jsxs as jsxs} from "react/jsx-runtime"; import {useMDXComponents as provideComponents} from "@mdx-js/react"; import {Badges, Badge, ReadOnlyBadge, VideoBadge, PossibleValuesTable, PossibleValueCode, PossibleValue, LabelAnchorValues, AnyColorValues, Alert, ActionLink, TagLink, NormalCode, ConfigBotBadge, HistoryBotBadge, AutomaticBadge, GridPortalBadge, MiniGridPortalBadge, MiniMapPortalBadge, MenuPortalBadge, MeetPortalBadge, LeftWristPortalBadge, RightWristPortalBadge, SheetPortalBadge, BotPortalBadge, TagPortalBadge, Example, AnyCursorValues, ImuPortalBadge, MapPortalBadge} from './components.mdx'; import {GlossaryRef} from './glossary/index'; export const toc = [{ "value": "Tag types", "id": "tag-types", "level": 2 }, { "value": "Boolean Tags", "id": "boolean-tags", "level": 3 }, { "value": "Number Tags", "id": "number-tags", "level": 3 }, { "value": "String Tags", "id": "string-tags", "level": 3 }, { "value": "Mod Tags", "id": "mod-tags", "level": 3 }, { "value": "Examples", "id": "examples", "level": 4 }, { "value": "Date Tags", "id": "date-tags", "level": 3 }, { "value": "Vector tags", "id": "vector-tags", "level": 3 }, { "value": "Rotation tags", "id": "rotation-tags", "level": 3 }, { "value": "Script tags", "id": "script-tags", "level": 3 }, { "value": "Info Tags", "id": "info-tags", "level": 2 }, { "value": "id", "id": "id", "level": 3 }, { "value": "space", "id": "space", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are", "level": 4 }, { "value": "Record Spaces", "id": "record-spaces", "level": 4 }, { "value": "Possible values are:", "id": "possible-values-are-1", "level": 4 }, { "value": "creator", "id": "creator", "level": 3 }, { "value": "Behavior Tags", "id": "behavior-tags", "level": 2 }, { "value": "draggable", "id": "draggable", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-2", "level": 4 }, { "value": "pointable", "id": "pointable", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-3", "level": 4 }, { "value": "focusable", "id": "focusable", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-4", "level": 4 }, { "value": "destroyable", "id": "destroyable", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-5", "level": 4 }, { "value": "editable", "id": "editable", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-6", "level": 4 }, { "value": "listening", "id": "listening", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-7", "level": 4 }, { "value": "system", "id": "system", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-8", "level": 4 }, { "value": "Visualization Tags", "id": "visualization-tags", "level": 2 }, { "value": "color", "id": "color", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-9", "level": 4 }, { "value": "cursor", "id": "cursor", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-10", "level": 4 }, { "value": "cursorHotspot", "id": "cursorhotspot", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-11", "level": 4 }, { "value": "strokeColor", "id": "strokecolor", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-12", "level": 4 }, { "value": "strokeWidth", "id": "strokewidth", "level": 3 }, { "value": "lineTo", "id": "lineto", "level": 3 }, { "value": "lineStyle", "id": "linestyle", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-13", "level": 4 }, { "value": "lineWidth", "id": "linewidth", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-14", "level": 4 }, { "value": "lineColor", "id": "linecolor", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-15", "level": 4 }, { "value": "label", "id": "label", "level": 3 }, { "value": "labelColor", "id": "labelcolor", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-16", "level": 4 }, { "value": "labelOpacity", "id": "labelopacity", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-17", "level": 4 }, { "value": "labelFontSize", "id": "labelfontsize", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-18", "level": 4 }, { "value": "labelPadding", "id": "labelpadding", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-19", "level": 4 }, { "value": "labelPaddingX", "id": "labelpaddingx", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-20", "level": 4 }, { "value": "labelPaddingY", "id": "labelpaddingy", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-21", "level": 4 }, { "value": "labelSize", "id": "labelsize", "level": 3 }, { "value": "labelSizeMode", "id": "labelsizemode", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-22", "level": 4 }, { "value": "labelPosition", "id": "labelposition", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-23", "level": 4 }, { "value": "labelAlignment", "id": "labelalignment", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-24", "level": 4 }, { "value": "labelFontAddress", "id": "labelfontaddress", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-25", "level": 4 }, { "value": "labelWordWrapMode", "id": "labelwordwrapmode", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-26", "level": 4 }, { "value": "scale", "id": "scale", "level": 3 }, { "value": "scaleX", "id": "scalex", "level": 3 }, { "value": "scaleY", "id": "scaley", "level": 3 }, { "value": "scaleZ", "id": "scalez", "level": 3 }, { "value": "scaleMode", "id": "scalemode", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-27", "level": 4 }, { "value": "form", "id": "form", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-28", "level": 4 }, { "value": "formSubtype", "id": "formsubtype", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-29", "level": 4 }, { "value": "formAddress", "id": "formaddress", "level": 3 }, { "value": "formAddressAspectRatio", "id": "formaddressaspectratio", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-30", "level": 4 }, { "value": "formAnimation", "id": "formanimation", "level": 3 }, { "value": "formAnimationAddress", "id": "formanimationaddress", "level": 3 }, { "value": "formOpacity", "id": "formopacity", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-31", "level": 4 }, { "value": "formRenderOrder", "id": "formrenderorder", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-32", "level": 4 }, { "value": "gltfVersion", "id": "gltfversion", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-33", "level": 4 }, { "value": "progressBar", "id": "progressbar", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-34", "level": 4 }, { "value": "progressBarColor", "id": "progressbarcolor", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-35", "level": 4 }, { "value": "progressBarBackgroundColor", "id": "progressbarbackgroundcolor", "level": 3 }, { "value": "progressBarPosition", "id": "progressbarposition", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-36", "level": 4 }, { "value": "anchorPoint", "id": "anchorpoint", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-37", "level": 4 }, { "value": "orientationMode", "id": "orientationmode", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-38", "level": 4 }, { "value": "maxLODThreshold", "id": "maxlodthreshold", "level": 3 }, { "value": "minLODThreshold", "id": "minlodthreshold", "level": 3 }, { "value": "transformer", "id": "transformer", "level": 3 }, { "value": "menuItemStyle", "id": "menuitemstyle", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-39", "level": 4 }, { "value": "Examples:", "id": "examples-1", "level": 4 }, { "value": "menuItemLabelStyle", "id": "menuitemlabelstyle", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-40", "level": 4 }, { "value": "Examples:", "id": "examples-2", "level": 4 }, { "value": "menuItemHoverMode", "id": "menuitemhovermode", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-41", "level": 4 }, { "value": "menuItemText", "id": "menuitemtext", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-42", "level": 4 }, { "value": "menuItemShowSubmitWhenEmpty", "id": "menuitemshowsubmitwhenempty", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-43", "level": 4 }, { "value": "Dimension Tags", "id": "dimension-tags", "level": 2 }, { "value": "[dimension]", "id": "dimension", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-44", "level": 4 }, { "value": "[dimension]SortOrder", "id": "dimensionsortorder", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-45", "level": 4 }, { "value": "[dimension]Position", "id": "dimensionposition", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-46", "level": 4 }, { "value": "Examples", "id": "examples-3", "level": 4 }, { "value": "[dimension]X", "id": "dimensionx", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-47", "level": 4 }, { "value": "[dimension]Y", "id": "dimensiony", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-48", "level": 4 }, { "value": "[dimension]Z", "id": "dimensionz", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-49", "level": 4 }, { "value": "[dimension]Rotation", "id": "dimensionrotation", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-50", "level": 4 }, { "value": "Examples:", "id": "examples-4", "level": 4 }, { "value": "Possible values are:", "id": "possible-values-are-51", "level": 4 }, { "value": "[dimension]RotationX", "id": "dimensionrotationx", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-52", "level": 4 }, { "value": "[dimension]RotationY", "id": "dimensionrotationy", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-53", "level": 4 }, { "value": "[dimension]RotationZ", "id": "dimensionrotationz", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-54", "level": 4 }, { "value": "[dimension]Start", "id": "dimensionstart", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-55", "level": 4 }, { "value": "[dimension]End", "id": "dimensionend", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-56", "level": 4 }, { "value": "Portal Bot Tags", "id": "portal-bot-tags", "level": 2 }, { "value": "portalColor", "id": "portalcolor", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-57", "level": 4 }, { "value": "portalCursor", "id": "portalcursor", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-58", "level": 4 }, { "value": "portalCursorHotspot", "id": "portalcursorhotspot", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-59", "level": 4 }, { "value": "portalBackgroundAddress", "id": "portalbackgroundaddress", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-60", "level": 4 }, { "value": "portalLocked", "id": "portallocked", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-61", "level": 4 }, { "value": "portalPannable", "id": "portalpannable", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-62", "level": 4 }, { "value": "portalPannableMin", "id": "portalpannablemin", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-63", "level": 4 }, { "value": "portalPannableMax", "id": "portalpannablemax", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-64", "level": 4 }, { "value": "portalRotatable", "id": "portalrotatable", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-65", "level": 4 }, { "value": "portalCameraRotation", "id": "portalcamerarotation", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-66", "level": 4 }, { "value": "portalZoomable", "id": "portalzoomable", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-67", "level": 4 }, { "value": "portalZoomableMin", "id": "portalzoomablemin", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-68", "level": 4 }, { "value": "portalZoomableMax", "id": "portalzoomablemax", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-69", "level": 4 }, { "value": "portalCameraZoom", "id": "portalcamerazoom", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-70", "level": 4 }, { "value": "portalGridScale", "id": "portalgridscale", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-71", "level": 4 }, { "value": "portalSurfaceScale", "id": "portalsurfacescale", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-72", "level": 4 }, { "value": "portalCameraControls", "id": "portalcameracontrols", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-73", "level": 4 }, { "value": "portalShowFocusPoint", "id": "portalshowfocuspoint", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-74", "level": 4 }, { "value": "portalCameraType", "id": "portalcameratype", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-75", "level": 4 }, { "value": "portalDisableCanvasTransparency", "id": "portaldisablecanvastransparency", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-76", "level": 4 }, { "value": "miniPortalHeight", "id": "miniportalheight", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-77", "level": 4 }, { "value": "miniPortalWidth", "id": "miniportalwidth", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-78", "level": 4 }, { "value": "miniPortalResizable", "id": "miniportalresizable", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-79", "level": 4 }, { "value": "mapPortalBasemap", "id": "mapportalbasemap", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-80", "level": 4 }, { "value": "wristPortalHeight", "id": "wristportalheight", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-81", "level": 4 }, { "value": "wristPortalWidth", "id": "wristportalwidth", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-82", "level": 4 }, { "value": "meetPortalVisible", "id": "meetportalvisible", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-83", "level": 4 }, { "value": "meetPortalAnchorPoint", "id": "meetportalanchorpoint", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-84", "level": 4 }, { "value": "meetPortalStyle", "id": "meetportalstyle", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-85", "level": 4 }, { "value": "Examples", "id": "examples-5", "level": 4 }, { "value": "meetPortalPrejoinEnabled", "id": "meetportalprejoinenabled", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-86", "level": 4 }, { "value": "meetPortalStartWithVideoMuted", "id": "meetportalstartwithvideomuted", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-87", "level": 4 }, { "value": "meetPortalStartWithAudioMuted", "id": "meetportalstartwithaudiomuted", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-88", "level": 4 }, { "value": "meetPortalRequireDisplayName", "id": "meetportalrequiredisplayname", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-89", "level": 4 }, { "value": "meetPortalDisablePrivateMessages", "id": "meetportaldisableprivatemessages", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-90", "level": 4 }, { "value": "meetPortalLanguage", "id": "meetportallanguage", "level": 3 }, { "value": "Possible Values are:", "id": "possible-values-are-91", "level": 4 }, { "value": "meetPortalJWT", "id": "meetportaljwt", "level": 3 }, { "value": "Possible Values are:", "id": "possible-values-are-92", "level": 4 }, { "value": "botPortalAnchorPoint", "id": "botportalanchorpoint", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-93", "level": 4 }, { "value": "botPortalStyle", "id": "botportalstyle", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-94", "level": 4 }, { "value": "Examples", "id": "examples-6", "level": 4 }, { "value": "tagPortalAnchorPoint", "id": "tagportalanchorpoint", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-95", "level": 4 }, { "value": "tagPortalStyle", "id": "tagportalstyle", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-96", "level": 4 }, { "value": "Examples", "id": "examples-7", "level": 4 }, { "value": "tagPortalShowButton", "id": "tagportalshowbutton", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-97", "level": 4 }, { "value": "tagPortalButtonIcon", "id": "tagportalbuttonicon", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-98", "level": 4 }, { "value": "tagPortalButtonHint", "id": "tagportalbuttonhint", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-99", "level": 4 }, { "value": "menuPortalStyle", "id": "menuportalstyle", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-100", "level": 4 }, { "value": "Examples", "id": "examples-8", "level": 4 }, { "value": "sheetPortalShowButton", "id": "sheetportalshowbutton", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-101", "level": 4 }, { "value": "sheetPortalButtonIcon", "id": "sheetportalbuttonicon", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-102", "level": 4 }, { "value": "sheetPortalButtonHint", "id": "sheetportalbuttonhint", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-103", "level": 4 }, { "value": "sheetPortalAllowedTags", "id": "sheetportalallowedtags", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-104", "level": 4 }, { "value": "sheetPortalAddedTags", "id": "sheetportaladdedtags", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-105", "level": 4 }, { "value": "pixelWidth", "id": "pixelwidth", "level": 3 }, { "value": "pixelHeight", "id": "pixelheight", "level": 3 }, { "value": "pixelRatio", "id": "pixelratio", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-106", "level": 4 }, { "value": "defaultPixelRatio", "id": "defaultpixelratio", "level": 3 }, { "value": "pointerPixel", "id": "pointerpixel", "level": 3 }, { "value": "cameraPosition", "id": "cameraposition", "level": 3 }, { "value": "cameraPositionOffset", "id": "camerapositionoffset", "level": 3 }, { "value": "cameraRotation", "id": "camerarotation", "level": 3 }, { "value": "cameraRotationOffset", "id": "camerarotationoffset", "level": 3 }, { "value": "cameraZoom", "id": "camerazoom", "level": 3 }, { "value": "cameraZoomOffset", "id": "camerazoomoffset", "level": 3 }, { "value": "cameraFocus", "id": "camerafocus", "level": 3 }, { "value": "imuSupported", "id": "imusupported", "level": 3 }, { "value": "deviceRotation", "id": "devicerotation", "level": 3 }, { "value": "History Tags", "id": "history-tags", "level": 2 }, { "value": "history", "id": "history", "level": 3 }, { "value": "markHash", "id": "markhash", "level": 3 }, { "value": "previousMarkHash", "id": "previousmarkhash", "level": 3 }, { "value": "markTime", "id": "marktime", "level": 3 }, { "value": "Config bot Tags", "id": "config-bot-tags", "level": 2 }, { "value": "inst", "id": "inst", "level": 3 }, { "value": "theme", "id": "theme", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-107", "level": 4 }, { "value": "gridPortal", "id": "gridportal", "level": 3 }, { "value": "miniGridPortal", "id": "minigridportal", "level": 3 }, { "value": "sheetPortal", "id": "sheetportal", "level": 3 }, { "value": "systemPortal", "id": "systemportal", "level": 3 }, { "value": "systemTagName", "id": "systemtagname", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-108", "level": 4 }, { "value": "Examples", "id": "examples-9", "level": 4 }, { "value": "systemPortalBot", "id": "systemportalbot", "level": 3 }, { "value": "systemPortalTag", "id": "systemportaltag", "level": 3 }, { "value": "systemPortalTagSpace", "id": "systemportaltagspace", "level": 3 }, { "value": "systemPortalSearch", "id": "systemportalsearch", "level": 3 }, { "value": "systemPortalDiff", "id": "systemportaldiff", "level": 3 }, { "value": "systemPortalDiffBot", "id": "systemportaldiffbot", "level": 3 }, { "value": "systemPortalDiffTag", "id": "systemportaldifftag", "level": 3 }, { "value": "systemPortalDiffTagSpace", "id": "systemportaldifftagspace", "level": 3 }, { "value": "systemPortalPane", "id": "systemportalpane", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-109", "level": 4 }, { "value": "idePortal", "id": "ideportal", "level": 3 }, { "value": "mapPortal", "id": "mapportal", "level": 3 }, { "value": "miniMapPortal", "id": "minimapportal", "level": 3 }, { "value": "menuPortal", "id": "menuportal", "level": 3 }, { "value": "leftWristPortal", "id": "leftwristportal", "level": 3 }, { "value": "rightWristPortal", "id": "rightwristportal", "level": 3 }, { "value": "meetPortal", "id": "meetportal", "level": 3 }, { "value": "botPortal", "id": "botportal", "level": 3 }, { "value": "tagPortal", "id": "tagportal", "level": 3 }, { "value": "Examples:", "id": "examples-10", "level": 4 }, { "value": "tagPortalSpace", "id": "tagportalspace", "level": 3 }, { "value": "Examples:", "id": "examples-11", "level": 4 }, { "value": "codeToolsPortal", "id": "codetoolsportal", "level": 3 }, { "value": "Examples:", "id": "examples-12", "level": 4 }, { "value": "imuPortal", "id": "imuportal", "level": 3 }, { "value": "dataPortal", "id": "dataportal", "level": 3 }, { "value": "Examples:", "id": "examples-13", "level": 4 }, { "value": "mousePointerPosition", "id": "mousepointerposition", "level": 3 }, { "value": "mousePointerRotation", "id": "mousepointerrotation", "level": 3 }, { "value": "mousePointerPortal", "id": "mousepointerportal", "level": 3 }, { "value": "leftPointerPosition", "id": "leftpointerposition", "level": 3 }, { "value": "leftPointerRotation", "id": "leftpointerrotation", "level": 3 }, { "value": "leftPointerPortal", "id": "leftpointerportal", "level": 3 }, { "value": "rightPointerPosition", "id": "rightpointerposition", "level": 3 }, { "value": "rightPointerRotation", "id": "rightpointerrotation", "level": 3 }, { "value": "rightPointerPortal", "id": "rightpointerportal", "level": 3 }, { "value": "mousePointer_left", "id": "mousepointer_left", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-110", "level": 4 }, { "value": "mousePointer_right", "id": "mousepointer_right", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-111", "level": 4 }, { "value": "mousePointer_middle", "id": "mousepointer_middle", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-112", "level": 4 }, { "value": "rightPointer_primary", "id": "rightpointer_primary", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-113", "level": 4 }, { "value": "rightPointer_squeeze", "id": "rightpointer_squeeze", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-114", "level": 4 }, { "value": "leftPointer_primary", "id": "leftpointer_primary", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-115", "level": 4 }, { "value": "leftPointer_squeeze", "id": "leftpointer_squeeze", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-116", "level": 4 }, { "value": "keyboard[key]", "id": "keyboard_key", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-117", "level": 4 }, { "value": "touch[index]", "id": "touch_index", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-118", "level": 4 }, { "value": "forceSignedScripts", "id": "forcesignedscripts", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-119", "level": 4 }, { "value": "url", "id": "url", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-120", "level": 4 }, { "value": "pageTitle", "id": "pagetitle", "level": 3 }, { "value": "Possible values are:", "id": "possible-values-are-121", "level": 4 }, { "value": "editingBot", "id": "editingbot", "level": 3 }, { "value": "editingTag", "id": "editingtag", "level": 3 }, { "value": "cursorStartIndex", "id": "cursorstartindex", "level": 3 }, { "value": "cursorEndIndex", "id": "cursorendindex", "level": 3 }, { "value": "Auth Bot Tags", "id": "auth-bot-tags", "level": 2 }, { "value": "avatarAddress", "id": "avataraddress", "level": 3 }, { "value": "name", "id": "name", "level": 3 }, { "value": "hasActiveSubscription", "id": "hasactivesubscription", "level": 3 }, { "value": "subscriptionTier", "id": "subscriptiontier", "level": 3 }, { "value": "openAiKey", "id": "openaikey", "level": 3 }, { "value": "Hidden Tags", "id": "hidden-tags", "level": 2 }]; function _createMdxContent(props) { const _components = { a: "a", blockquote: "blockquote", code: "code", h2: "h2", h3: "h3", h4: "h4", img: "img", li: "li", ol: "ol", p: "p", pre: "pre", strong: "strong", ul: "ul", ..._provideComponents(), ...props.components }; return _jsxs(_Fragment, { children: [_jsx(_components.p, { children: "CasualOS has many tags." }), "\n", _jsx(_components.h2, { id: "tag-types", children: "Tag types" }), "\n", _jsx(_components.p, { children: "Tags are peices of data that are contained in bots. They are used to describe all sorts of properties about a bot, including how the bot looks, where it is visible, and what it does." }), "\n", _jsx(_components.p, { children: "Each tag is made up of two parts: a name and a value." }), "\n", _jsx(_components.p, { children: "The name is just that: a name. It describes what the value represents and makes the value easily accessible via scripting." }), "\n", _jsxs(_components.p, { children: ["Tag values can be pretty much anything, and CasualOS is able to automatically understand some values based on how they are formatted.\nFor example, CasualOS knows that the string "true" represents the special ", _jsx(_components.a, { href: "https://javascript.info/types#boolean-logical-type", children: "boolean value" }), " ", _jsx(_components.code, { children: "true" }), ".\nWhen we're talking about the different formats that CasualOS automatically understands, we call them tag types.\nTag types are the kinds of data that CasualOS automatically understands and supports in built-in tags. Below, you can find a list of the various tag types and how CasualOS understands them."] }), "\n", _jsx(_components.p, { children: "In some sense, tag types are like how spreadsheet software can automatically detect different data formats and present them in a nice manner.\nHowever, unlike spreadsheet software, CasualOS always preserves the original tag values and simply inteprets the ones it understands.\nThe interpreted values are used by built-in tags, but both are available to scripts." }), "\n", _jsx(_components.h3, { id: "boolean-tags", children: "Boolean Tags" }), "\n", _jsxs(_components.p, { children: ["Boolean tags are tags whose value contains a ", _jsx(_components.a, { href: "https://javascript.info/types#boolean-logical-type", children: "boolean value" }), ". That is, either ", _jsx(_components.code, { children: "true" }), " or ", _jsx(_components.code, { children: "false" }), "."] }), "\n", _jsx(_components.h3, { id: "number-tags", children: "Number Tags" }), "\n", _jsxs(_components.p, { children: ["Number tags are tags whose value contains a ", _jsx(_components.a, { href: "https://javascript.info/types#number", children: "number value" }), ".\nCasualOS currently supports the following number formats:"] }), "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: ["Integer numbers", "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "123" }), ", ", _jsx(_components.code, { children: "-123" })] }), "\n"] }), "\n"] }), "\n", _jsxs(_components.li, { children: ["Decimal numbers", "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "1.23" }), ", ", _jsx(_components.code, { children: "-1.23" })] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: ".23" }), ", ", _jsx(_components.code, { children: "-.23" })] }), "\n"] }), "\n"] }), "\n", _jsxs(_components.li, { children: ["Scientific notation", "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "1.23E2" }), ", ", _jsx(_components.code, { children: "1.23E-2" }), ", ", _jsx(_components.code, { children: "-1.23E2" }), ", ", _jsx(_components.code, { children: "-1.23E-2" })] }), "\n"] }), "\n"] }), "\n", _jsxs(_components.li, { children: ["Special numbers", "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "Infinity" }), ", ", _jsx(_components.code, { children: "-Infinity" })] }), "\n"] }), "\n"] }), "\n", _jsxs(_components.li, { children: ["Tagged numbers", "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "🔢123" }), ", ", _jsx(_components.code, { children: "🔢-123" })] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "🔢1.23" }), ", ", _jsx(_components.code, { children: "🔢-1.23" })] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "🔢.23" }), ", ", _jsx(_components.code, { children: "🔢-.23" })] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "🔢1.23E2" }), ", ", _jsx(_components.code, { children: "🔢1.23E-2" })] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "🔢Infinity" }), ", ", _jsx(_components.code, { children: "🔢-Infinity" })] }), "\n"] }), "\n"] }), "\n"] }), "\n", _jsx(_components.h3, { id: "string-tags", children: "String Tags" }), "\n", _jsxs(_components.p, { children: ["String tags are tags whose value contains a ", _jsx(_components.a, { href: "https://javascript.info/types#string", children: "string value" }), ".\nIn CasualOS, tag values that aren't recognized as a number or boolean are treated as strings.\nBasically, if the tag value is typed in by the user and doesn't look like a boolean or number and isn't started with a tag prefix (i.e. ", _jsx(_components.code, { children: "🔢" }), " for numbers, ", _jsx(_components.code, { children: "@" }), " for scripts, ", _jsx(_components.code, { children: "🧬" }), " for mods, etc.), then the tag value is treated like a string."] }), "\n", _jsxs(_components.p, { children: ["In addition to this automatic behavior, CasualOS supports using the ", _jsx(_components.code, { children: "📝" }), " emoji to mark a tag value as a string.\nThis is useful in cases where you want the value to start with another prefix but don't want the tag to be interpreted as that tag type.\nFor example, if you want the text to be the word "true" but want the interpreted tag value to be a string instead of a number, you can set the tag value to ", _jsx(_components.code, { children: "📝true" }), "."] }), "\n", _jsx(_components.h3, { id: "mod-tags", children: "Mod Tags" }), "\n", _jsxs(_components.p, { children: ["Mod tags are tags whose value is prefixed with ", _jsx(_components.code, { children: "🧬" }), " and contains a ", _jsx(_components.a, { href: "https://en.wikipedia.org/wiki/JSON", children: "JSON value" }), ".\nCasualOS interprets mod tags into ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects", children: "JavaScript objects" }), ".\nMod tags are essentially a convienent way of storing JSON and having CasualOS automatically run the ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse", children: _jsx(_components.code, { children: "JSON.parse()" }) }), " function on it."] }), "\n", _jsx(_components.h4, { id: "examples", children: "Examples" }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-title='A", metastring: "mod that contains contact information'", children: "🧬{\n "firstName": "Bob",\n "lastName": "Johnson",\n "phoneNumber": "+15555555555"\n}\n" }) }), "\n", _jsx(_components.h3, { id: "date-tags", children: "Date Tags" }), "\n", _jsxs(_components.p, { children: ["Date tags are tags whose value is prefixed with the ", _jsx(_components.code, { children: "📅" }), " emoji and contains date and time information.\nHandling date and time information in JavaScript is complicated, so CasualOS tries to make this as easy as possible by integrating storage of date values.\nWhen CasualOS runs across a date tag, it parses the date and converts it into a ", _jsx(ActionLink, { action: "DateTime" }), " object for scripts to use."] }), "\n", _jsx(_components.p, { children: "CasualOS currently supports the following date formats:" }), "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: ["Formats that assume the UTC-0 time zone", "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "📅2022" }), ": Midnight January 1st on the given year (2022)"] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "📅2022-05" }), ": Midnight on the 1st of the given month (May) and year (2022)"] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "📅2022-10-03" }), ": Midnight on the given day (3rd), month (October), and year (2022)"] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "📅2022-10-03T07:30:00" }), ": Given year (2022), month (October), day (3rd), hour (7), minute (30), and second (0)"] }), "\n"] }), "\n"] }), "\n", _jsxs(_components.li, { children: ["Formats that use the specified time zone", "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "📅2022-10-03T07:30:00Z" }), ": Given year (2022), month (October), day (3rd), hour (7), minute (30), and second (0) in the UTC-0 time zone"] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "📅2022-10-03T07:30:00-05:00" }), ": Given year (2022), month (October), day (3rd), hour (7), minute (30), and second (0) in the UTC-5 time zone."] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "📅2022-10-03T07:30:00 America/New_York" }), ": Given year (2022), month (October), day (3rd), hour (7), minute (30), second (0), in the specified ", _jsx(_components.a, { href: "https://nodatime.org/TimeZones", children: "IANA time zone" }), "(America/New_York)"] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "📅2022-10-03T07:30:00-05:00 America/Chicago" }), ": Given year (2022), month (October), day (3rd), hour (7), minute (30), second (0) in the UTC-5 timezone that is converted to the specified ", _jsx(_components.a, { href: "https://nodatime.org/TimeZones", children: "IANA time zone" }), "(America/Chicago)"] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "📅2022-10-03T07:30:00 local" }), ": Given year (2022), month (October), day (3rd), hour (7), minute (30), and second (0) in the local time zone."] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "📅2022-10-03T07:30:00-05:00 local" }), ": Given year (2022), month (October), day (3rd), hour (7), minute (30), and second (0) in the UTC-5 timezone that is converted to the local time zone."] }), "\n"] }), "\n"] }), "\n"] }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(ActionLink, { action: "DateTime" }), " for information and examples on scripting."] }), "\n", _jsx(_components.h3, { id: "vector-tags", children: "Vector tags" }), "\n", _jsxs(_components.p, { children: ["Vector tags are tags whose value is prefixed with the ", _jsx(_components.code, { children: "➡️" }), " emoji and represents a 2D or 3D point or direction.\nIn math, a vector simply a list of numbers, but in CasualOS a vector specifically refers either to a pair of numbers (representing a 2D vector) or a trio of numbers (representing a 3D vector).\nWhen CasualOS runs across a vector tag, it parses the numbers and converts it into a ", _jsx(_components.a, { href: "/3.1.36/math/vectors#vector2", children: _jsx(_components.code, { children: "Vector2" }) }), " or ", _jsx(_components.a, { href: "/3.1.36/math/vectors#vector3", children: _jsx(_components.code, { children: "Vector3" }) }), " object depending on if it contains 2 or 3 numbers."] }), "\n", _jsxs(_components.p, { children: ["Vector tags are useful for easily setting the X, Y, and Z components of supported tags like ", _jsx(TagLink, { tag: "[dimension]Position" }), "."] }), "\n", _jsx(_components.p, { children: "CasualOS currently supports the following vector formats:" }), "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: ["2D vectors", "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "➡️1,2" }), ", ", _jsx(_components.code, { children: "➡️-1,-2" }), ", ", _jsx(_components.code, { children: "➡️1.23,4.56" })] }), "\n"] }), "\n"] }), "\n", _jsxs(_components.li, { children: ["3D vectors", "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "➡️1,2,3" }), ", ", _jsx(_components.code, { children: "➡️-1,-2,-3" }), ", ", _jsx(_components.code, { children: "➡️1.23,4.56,7.89" })] }), "\n"] }), "\n"] }), "\n"] }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "/3.1.36/math/vectors", children: "Vectors" }), " for more information and examples for scripting."] }), "\n", _jsx(_components.h3, { id: "rotation-tags", children: "Rotation tags" }), "\n", _jsxs(_components.p, { children: ["Rotation tags are tags whose value is prefixed with the ", _jsx(_components.code, { children: "🔁" }), " emoji and represents a 3D rotation or orientation.\nIn math, a rotation represents a change in orientation. This rotation can then be applied to vectors and bots to modify their orientation."] }), "\n", _jsxs(_components.p, { children: ["For an interactive explanation of rotations and quaternions, see ", _jsx(_components.a, { href: "https://youtu.be/zjMuIxRvygQ", children: "this video" }), "."] }), "\n", _jsxs(_components.p, { children: ["When CasualOS runs across a rotation tag, it parses the numbers and converts it into a ", _jsx(_components.a, { href: "/3.1.36/math/rotations#rotation", children: _jsx(_components.code, { children: "Rotation" }) }), " object."] }), "\n", _jsxs(_components.p, { children: ["Rotation tags are useful for easily setting the X, Y, and Z components of supported tags like ", _jsx(TagLink, { tag: "[dimension]Rotation" }), "."] }), "\n", _jsx(_components.p, { children: "CasualOS currently supports the following rotation format:" }), "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.a, { href: "https://euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/", children: "Quaternion" }), "\n", _jsxs(_components.ul, { children: ["\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "🔁0,0,0,1" }), ": Identity rotation (no rotation)"] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "🔁0.7071068,0,0,0.7071068" }), ": 90 Degree rotation around the X axis"] }), "\n", _jsxs(_components.li, { children: [_jsx(_components.code, { children: "🔁0,0,0.7071068,0.7071068" }), ": 90 Degree rotation around the Z axis"] }), "\n"] }), "\n"] }), "\n"] }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "/3.1.36/math/rotations", children: "Rotations" }), " for more information and examples for scripting."] }), "\n", _jsx(_components.h3, { id: "script-tags", children: "Script tags" }), "\n", _jsxs(_components.p, { children: ["Script tags are tags whose value is prefixed with the ", _jsx(_components.code, { children: "@" }), " symbol and they represent ", _jsx(_components.a, { href: "https://javascript.info/intro", children: "JavaScript" }), " code that can be executed by CasualOS in response to user actions. (Like clicking a bot)"] }), "\n", _jsxs(_components.p, { children: ["Script tags (also known as listeners) must be valid ", _jsx(_components.a, { href: "https://javascript.info/intro", children: "JavaScript" }), " code and can perform fairly arbitrary actions.\nThis includes searching, creating and destroying bots, changing bot tags, showing messages to the user, making web requests, saving permanent records, and more."] }), "\n", _jsxs(_components.p, { children: ["Script tags that have one of the names listed ", _jsx(_components.a, { href: "/3.1.36/listen-tags", children: "here" }), " can be executed directly by CasualOS.\nAdditionally, it is possible to trigger scripts from other scripts using the ", _jsx(ActionLink, { action: "shout(name, arg?)" }), " and ", _jsx(ActionLink, { action: "whisper(bot, name, arg?)" }), " actions."] }), "\n", _jsxs(_components.p, { children: ["For a tutorial on scripting and the basics of CasualOS, check out the ", _jsx(_components.a, { href: "/", children: "Pillars of Casual Simulation" }), ".\nFinally, you can check out the comprehensive ", _jsx(_components.a, { href: "/3.1.36/actions", children: "list of actions" }), " that are supported in CasualOS."] }), "\n", _jsx(_components.h2, { id: "info-tags", children: "Info Tags" }), "\n", _jsx(_components.h3, { id: "id", children: _jsx(_components.code, { children: "id" }) }), "\n", _jsxs(Badges, { children: [_jsx(ReadOnlyBadge, {}), _jsx(VideoBadge, { url: "https://youtu.be/LFNExI6WgFw" })] }), "\n", _jsx(_components.p, { children: "The ID of the bot." }), "\n", _jsx(_components.p, { children: "Every bot has an automatically generated unique ID that cannot be changed." }), "\n", _jsx(_components.h3, { id: "space", children: _jsx(_components.code, { children: "space" }) }), "\n", _jsxs(Badges, { children: [_jsx(ReadOnlyBadge, {}), _jsx(Example, { code: "space" })] }), "\n", _jsx(_components.p, { children: "The space the bot lives in." }), "\n", _jsx(_components.p, { children: "Every bot is stored in a space that specifies how long the bot lives and if it is shared with other people." }), "\n", _jsx(_components.h4, { id: "possible-values-are", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "shared", children: _jsx(_components.p, { children: "The bot is saved in the inst and is shared with everyone else. (default)" }) }), _jsx(PossibleValueCode, { value: "local", children: _jsx(_components.p, { children: "The bot is saved on the device it was created from and is not shared with other devices." }) }), _jsx(PossibleValueCode, { value: "tempLocal", children: _jsx(_components.p, { children: "The bot is not saved (it is temporary) and is not shared with other sessions.\nWhen the current session is closed (by refreshing or closing the tab), the bot is destroyed." }) }), _jsx(PossibleValueCode, { value: "tempShared", children: _jsxs(_components.p, { children: ["The bot is not saved (it is temporary) and is shared with everyone else.\nBots in this space show up in the ", _jsx(_components.code, { children: "remoteTempShared" }), " space to other devices.\nOnly the current session can create, edit, and destroy bots in this space.\nWhen the current session is closed, the bot is destroyed."] }) }), _jsx(PossibleValueCode, { value: "remoteTempShared", children: _jsxs(_components.p, { children: ["The bot is not saved (it is temporary) and is shared with everyone else.\nBots appear in this space when another remote puts a bot in their ", _jsx(_components.code, { children: "tempShared" }), " space.\nOnly the other remote's session can create, edit, and destroy bots in this space.\nWhen the other remote's session is closed, the bot is destroyed."] }) }), _jsx(PossibleValueCode, { value: "history", children: _jsxs(_components.p, { children: ["The bot represents a mark (save point).\nThe history space is not available by default.\nYou need to use the ", _jsx(ActionLink, { action: "server.browseHistory()" }), " function to load it.\nAdditionally, the history space is read-only. This means that bots cannot be added or removed from it and they also cannot be edited."] }) }), _jsx(PossibleValueCode, { value: "admin", children: _jsxs(_components.p, { children: ["The bot is saved on the server and is shared across all instances.\nAdmin space is initially locked whenever a new session starts. While locked, it is impossible to create, update, or destroy bots in the admin space.\nYou must use the ", _jsx(ActionLink, { action: "adminSpace.unlock(password)" }), " function to unlock it."] }) }), _jsx(PossibleValueCode, { value: "certified", children: _jsxs(_components.p, { children: ["The bot represents a ", _jsx("a", { href: "https://en.wikipedia.org/wiki/Public_key_certificate", children: "cryptographic certificate" }), ".\nCertified bots cannot be edited or destroyed using traditional means.\nInstead, you can create and destroy certificates using the ", _jsx(ActionLink, { action: "crypto.createCertificate(certificate, password, keypair)" }), " and\n", _jsx(ActionLink, { action: "crypto.revokeCertificate(certificate, password, signer?)" }), " functions."] }) })] }), "\n", _jsx(_components.h4, { id: "record-spaces", children: "Record Spaces" }), "\n", _jsx(_components.p, { children: "Records can be stored in spaces as well. Like bot spaces, record spaces determine how long the record lives and if it is shared with other people." }), "\n", _jsx(_components.h4, { id: "possible-values-are-1", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "tempRestricted", children: _jsx(_components.p, { children: "The record is saved but will be deleted at the end of the day and is only retrievable by the user and appBundle that created them. (default)" }) }), _jsx(PossibleValueCode, { value: "tempGlobal", children: _jsx(_components.p, { children: "The record is saved but will be deleted at the end of the day and it is shared with everyone." }) }), _jsx(PossibleValueCode, { value: "permanentRestricted", children: _jsx(_components.p, { children: "The record is saved and is only retrievable by the user and appBundle that created them." }) }), _jsx(PossibleValueCode, { value: "permanentGlobal", children: _jsx(_components.p, { children: "The record is saved and is shared with everyone." }) })] }), "\n", _jsx(_components.h3, { id: "creator", children: _jsx(_components.code, { children: "creator" }) }), "\n", _jsx(Badges, { children: _jsx(VideoBadge, { url: "https://youtu.be/LFNExI6WgFw" }) }), "\n", _jsx(_components.p, { children: "The ID of the bot that created this bot.\nThe creator bot must be in the same space as this bot." }), "\n", _jsx(_components.h2, { id: "behavior-tags", children: "Behavior Tags" }), "\n", _jsx(_components.p, { children: "These tags affect how CasualOS allows the users to interact with bots." }), "\n", _jsx(_components.h3, { id: "draggable", children: _jsx(_components.code, { children: "draggable" }) }), "\n", _jsx(_components.p, { children: "Whether the bot is able to be moved by the built-in CasualOS system." }), "\n", _jsxs(_components.p, { children: ["Note that this value only controls whether CasualOS can move bots automatically as the result of user interaction.\nIf set to ", _jsx(_components.code, { children: "false" }), ", then CasualOS will not change any tags, but it will still send events for the bot (e.g. ", _jsx(ActionLink, { action: "@onDrag" }), ", ", _jsx(ActionLink, { action: "@onAnyBotDrag" }), ", ", _jsx(ActionLink, { action: "@onDrop" }), ", ", _jsx(ActionLink, { action: "@onAnyBotDrop" }), ", etc.)."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-2", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The bot is able to be dragged. (default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The bot cannot be dragged." }) })] }), "\n", _jsx(_components.h3, { id: "pointable", children: _jsx(_components.code, { children: "pointable" }) }), "\n", _jsx(_components.p, { children: "Whether the bot interacts with the pointer." }), "\n", _jsxs(_components.p, { children: ["Bots that are pointable can receive clicks, pointer enter/exit, and drop events.\nNote that the ", _jsx(TagLink, { tag: "pointable" }), " tag also affects whether the content inside an ", _jsx(_components.a, { href: "#iframe-form", children: "iframe form" }), " is interactable."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-3", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The bot interacts with the pointer. (default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The bot does not interact with the pointer." }) })] }), "\n", _jsx(_components.h3, { id: "focusable", children: _jsx(_components.code, { children: "focusable" }) }), "\n", _jsx(_components.p, { children: "Whether the bot is able to be focused." }), "\n", _jsxs(_components.p, { children: ["Bots that are focusable can receive focus events like ", _jsx(TagLink, { tag: "@onFocusEnter" }), "."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-4", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The bot is focusable. (default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The bot is not focusable." }) })] }), "\n", _jsx(_components.h3, { id: "destroyable", children: _jsx(_components.code, { children: "destroyable" }) }), "\n", _jsx(_components.p, { children: "Whether the bot is able to be destroyed." }), "\n", _jsx(_components.h4, { id: "possible-values-are-5", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The bot will be able to be destroyed. (default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The bot will not be able to be destroyed." }) })] }), "\n", _jsx(_components.h3, { id: "editable", children: _jsx(_components.code, { children: "editable" }) }), "\n", _jsx(_components.p, { children: "Whether the bot is able to be edited in the sheet in Channel Designer." }), "\n", _jsx(Alert, { type: "warning", children: _jsxs(_components.p, { children: [_jsx("strong", { children: "Use with caution." }), " Once you set ", _jsx(TagLink, { tag: "editable" }), " to ", _jsx(NormalCode, { children: "false" }), ", you can't edit the bot via the sheet."] }) }), "\n", _jsx(_components.h4, { id: "possible-values-are-6", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The bot can be edited via the sheet. (default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The bot cannot be edited via the sheet. (including being able to set editable back to true)" }) })] }), "\n", _jsx(_components.h3, { id: "listening", children: _jsx(_components.code, { children: "listening" }) }), "\n", _jsxs(_components.p, { children: ["Determines whether this bot responds to whispers or shouts. If this tag is set to ", _jsx(_components.code, { children: "true" }), " it will respond to them. If set to ", _jsx(_components.code, { children: "false" }), ", it will not."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-7", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The bot will respond to whispers and shouts. (default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The bot will not respond to whispers or shouts." }) })] }), "\n", _jsx(_components.h3, { id: "system", children: _jsx(_components.code, { children: "system" }) }), "\n", _jsxs(_components.p, { children: ["The "system" that this bot represents. Bots with a ", _jsx(_components.code, { children: "#system" }), " tag will be able to appear in the ", _jsx(GlossaryRef, { term: "systemPortal", children: "systemPortal" }), ".\nThe you can kinda think of the ", _jsx(_components.code, { children: "#system" }), " tag as the name that the systemPortal uses for bots.\n", _jsx(_components.code, { children: "#system" }), " tag values should ideally be three sections separated by a ", _jsx(_components.code, { children: "." }), "."] }), "\n", _jsxs(_components.p, { children: ["Note that this tag can be changed by using the ", _jsx(TagLink, { tag: "systemTagName" }), " tag."] }), "\n", _jsxs(_components.p, { children: ["For example, the first section might be the name of the app bundle, the second section would be the area that the bot belongs in, and the third section would be the name of the bot.\ne.g. ", _jsx(_components.code, { children: "myAppBundle.managers.timeline" }), " would specify that a bot belongs in ", _jsx(_components.code, { children: "myAppBundle" }), " and is one of the manager bots.\nThe systemPortal would then show each bot organized by ", _jsx(_components.code, { children: "#system" }), " tag."] }), "\n", _jsx(_components.p, { children: _jsx(_components.img, { alt: "Image of bots in the systemPortal", src: require("!/home/runner/work/casualos/casualos/node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/url-loader/dist/cjs.js?limit=10000&name=assets/images/[name]-[contenthash].[ext]&fallback=/home/runner/work/casualos/casualos/node_modules/.pnpm/[email protected][email protected]/node_modules/file-loader/dist/cjs.js!./../../static/img/glossary/systemPortal_02.png").default + "", width: "196", height: "301" }) }), "\n", _jsx(_components.h4, { id: "possible-values-are-8", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: "(default)" }), _jsx(PossibleValue, { value: "Any String", children: "The system that this bot belongs to." })] }), "\n", _jsx(_components.h2, { id: "visualization-tags", children: "Visualization Tags" }), "\n", _jsx(_components.p, { children: "These tags change how CasualOS displays bots." }), "\n", _jsx(_components.h3, { id: "color", children: _jsx(_components.code, { children: "color" }) }), "\n", _jsx(Badges, { children: _jsx(VideoBadge, { url: "https://youtu.be/tV4xJJjxDkE" }) }), "\n", _jsx(_components.p, { children: "The color of the bot." }), "\n", _jsx(_components.h4, { id: "possible-values-are-9", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "white", children: _jsx(_components.p, { children: "(default)" }) }), _jsx(PossibleValueCode, { value: "#858585", children: _jsx(_components.p, { children: "(default for keyboards)" }) }), _jsx(AnyColorValues, {}), _jsx(PossibleValueCode, { value: "clear", children: _jsx(_components.p, { children: "The bot's body will be invisible." }) })] }), "\n", _jsx(_components.h3, { id: "cursor", children: _jsx(_components.code, { children: "cursor" }) }), "\n", _jsx(_components.p, { children: "The cursor that should be used when the mouse pointer is hovering over the bot in the bot and menu portals." }), "\n", _jsx(_components.p, { children: "Note that when using a custom cursor image, the image should be 32x32 pixels or smaller.\nThis is because that is the largest cursor image size that some operating systems support." }), "\n", _jsx(_components.h4, { id: "possible-values-are-10", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(AnyCursorValues, {}) }), "\n", _jsx(_components.h3, { id: "cursorhotspot", children: _jsx(_components.code, { children: "cursorHotspot" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The X and Y position of the pixel in the cursor image that is the "hotspot".\nThat is, the pixel which represents the point or tip of the cursor." }), "\n", _jsx(_components.p, { children: "The top left of the image is (0, 0)." }), "\n", _jsx(_components.h4, { id: "possible-values-are-11", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "➡️0,0", children: "(default)" }), _jsx(PossibleValue, { value: "Any Vector > ➡️0,0", children: "The position that the cursor hotspot should be at." })] }), "\n", _jsx(_components.h3, { id: "strokecolor", children: _jsx(_components.code, { children: "strokeColor" }) }), "\n", _jsx(_components.p, { children: "The color of the bot's outline." }), "\n", _jsx(_components.h4, { id: "possible-values-are-12", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "clear", children: _jsx(_components.p, { children: "(default)" }) }), _jsx(AnyColorValues, {})] }), "\n", _jsx(_components.h3, { id: "strokewidth", children: _jsx(_components.code, { children: "strokeWidth" }) }), "\n", _jsx(_components.p, { children: "The width of the bot's outline." }), "\n", _jsx(_components.h3, { id: "lineto", children: _jsx(_components.code, { children: "lineTo" }) }), "\n", _jsx(_components.p, { children: "The bot, bot ID, list of bots, or list of bot IDs that this bot should draw lines to." }), "\n", _jsx(_components.h3, { id: "linestyle", children: _jsx(_components.code, { children: "lineStyle" }) }), "\n", _jsx(_components.p, { children: "The style of the lines." }), "\n", _jsx(_components.h4, { id: "possible-values-are-13", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "line", children: _jsx(_components.p, { children: "Displays the line without additional decoration. (Default)" }) }), _jsx(PossibleValueCode, { value: "arrow", children: _jsx(_components.p, { children: "Displays the line with an arrow at the tip pointing to the target bot." }) }), _jsx(PossibleValueCode, { value: "wall", children: _jsx(_components.p, { children: "Displays the line as a vertical wall." }) })] }), "\n", _jsx(_components.h3, { id: "linewidth", children: _jsx(_components.code, { children: "lineWidth" }) }), "\n", _jsx(_components.p, { children: "The width of the lines from this bot." }), "\n", _jsx(_components.h4, { id: "possible-values-are-14", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "1", children: _jsx(_components.p, { children: "The width of the line is 1 unit. (default)" }) }), _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "The width of the line is the given size." }) })] }), "\n", _jsx(_components.h3, { id: "linecolor", children: _jsx(_components.code, { children: "lineColor" }) }), "\n", _jsx(_components.p, { children: "The color of the lines." }), "\n", _jsx(_components.h4, { id: "possible-values-are-15", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "white", children: _jsx(_components.p, { children: "(default)" }) }), _jsx(AnyColorValues, {})] }), "\n", _jsx(_components.h3, { id: "label", children: _jsx(_components.code, { children: "label" }) }), "\n", _jsx(Badges, { children: _jsx(VideoBadge, { url: "https://youtu.be/rWyJ1A42BFA" }) }), "\n", _jsx(_components.p, { children: "The text that the bot should show in a label." }), "\n", _jsx(_components.h3, { id: "labelcolor", children: _jsx(_components.code, { children: "labelColor" }) }), "\n", _jsx(Badges, { children: _jsx(VideoBadge, { url: "https://youtu.be/tNlH0gx7OBQ" }) }), "\n", _jsx(_components.p, { children: "The color of the text in the label." }), "\n", _jsx(_components.h4, { id: "possible-values-are-16", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "black", children: _jsx(_components.p, { children: "(default)" }) }), _jsx(AnyColorValues, {})] }), "\n", _jsx(_components.h3, { id: "labelopacity", children: _jsx(_components.code, { children: "labelOpacity" }) }), "\n", _jsx(_components.p, { children: "The opacity of the text in the label." }), "\n", _jsx(_components.h4, { id: "possible-values-are-17", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "1", children: _jsx(_components.p, { children: "(default)" }) }), _jsx(PossibleValue, { value: "Any Number >= 0 and <= 1", children: _jsx(_components.p, { children: "The label will use the given opacity." }) })] }), "\n", _jsx(_components.h3, { id: "labelfontsize", children: _jsx(_components.code, { children: "labelFontSize" }) }), "\n", _jsx(_components.p, { children: "The font size of the text in the label.\nChanging this value scales the text characters in the label which changes the text layout." }), "\n", _jsx(_components.h4, { id: "possible-values-are-18", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "auto", children: _jsx(_components.p, { children: "The label font size is automatically scaled to fit the text in the bot. (Default)" }) }), _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "The label will use the given font size." }) })] }), "\n", _jsx(_components.h3, { id: "labelpadding", children: _jsx(_components.code, { children: "labelPadding" }) }), "\n", _jsx(_components.p, { children: "The amount of space that should be between the edge of the bot and the edge of the label.\nUnits are in grid spaces." }), "\n", _jsxs(_components.p, { children: ["When ", _jsx(TagLink, { tag: "labelFontSize" }), " is set to ", _jsx(_components.code, { children: "auto" }), ", this setting affects both the label height and width.\nOtherwise, it only affects the width."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-19", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "0", children: _jsx(_components.p, { children: "There is no space between the edge of the bot and the edge of the label. (Default)" }) }), _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "The label is sized so that it fits in the space provided by the bot minus the padding." }) })] }), "\n", _jsx(_components.h3, { id: "labelpaddingx", children: _jsx(_components.code, { children: "labelPaddingX" }) }), "\n", _jsx(_components.p, { children: "The amount of space that should be between the side of the bot and the side of the label.\nUnits are in grid spaces." }), "\n", _jsxs(_components.p, { children: ["This tag is similar to ", _jsx(TagLink, { tag: "labelPadding" }), " except that it only affects the width of the label."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-20", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "0", children: _jsx(_components.p, { children: "There is no space between the edge of the bot and the edge of the label. (Default)" }) }), _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "The label is sized so that it fits in the space provided by the bot minus the padding." }) })] }), "\n", _jsx(_components.h3, { id: "labelpaddingy", children: _jsx(_components.code, { children: "labelPaddingY" }) }), "\n", _jsx(_components.p, { children: "The amount of space that should be between the top of the bot and the top of the label.\nUnits are in grid spaces." }), "\n", _jsxs(_components.p, { children: ["This tag is similar to ", _jsx(TagLink, { tag: "labelPadding" }), " except that it only affects the height of the label.\nAs such, this tag only has an effect when ", _jsx(TagLink, { tag: "labelFontSize" }), " is set to ", _jsx(_components.code, { children: "auto" }), "."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-21", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "0", children: _jsx(_components.p, { children: "There is no space between the edge of the bot and the edge of the label. (Default)" }) }), _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "The label is sized so that it fits in the space provided by the bot minus the padding." }) })] }), "\n", _jsx(_components.h3, { id: "labelsize", children: _jsx(_components.code, { children: "labelSize" }) }), "\n", _jsx(Badges, { children: _jsx(VideoBadge, { url: "https://youtu.be/ql5R8t6RP-c" }) }), "\n", _jsx(_components.p, { children: "The size of the label. Default is 1.\nChanging this value scales the label text in size without changing the text layout.\nThis is useful for floating labels where you want the bubble to be larger without changing the size of the font." }), "\n", _jsx(_components.h3, { id: "labelsizemode", children: _jsx(_components.code, { children: "labelSizeMode" }) }), "\n", _jsx(_components.p, { children: "The sizing mode for the label." }), "\n", _jsx(_components.h4, { id: "possible-values-are-22", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "normal", children: _jsx(_components.p, { children: "Don't automatically scale the label size. (default)" }) }), _jsx(PossibleValueCode, { value: "auto", children: _jsx(_components.p, { children: "Automatically scale the label to keep the same size on the screen." }) })] }), "\n", _jsx(_components.h3, { id: "labelposition", children: _jsx(_components.code, { children: "labelPosition" }) }), "\n", _jsx(Badges, { children: _jsx(VideoBadge, { url: "https://youtu.be/0P87qsLexW0" }) }), "\n", _jsx(_components.p, { children: "The anchor position for the label." }), "\n", _jsx(_components.h4, { id: "possible-values-are-23", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(LabelAnchorValues, {}) }), "\n", _jsx(_components.h3, { id: "labelalignment", children: _jsx(_components.code, { children: "labelAlignment" }) }), "\n", _jsx(_components.p, { children: "The text alignment for the label." }), "\n", _jsx(_components.h4, { id: "possible-values-are-24", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "center", children: _jsx(_components.p, { children: "The text is aligned around the center of the face that the label is anchored to. (default)" }) }), _jsx(PossibleValueCode, { value: "left", children: _jsx(_components.p, { children: "The text is aligned on the left side of the face that the label is anchored to." }) }), _jsx(PossibleValueCode, { value: "right", children: _jsx(_components.p, { children: "The text is aligned on the right side of the face that the label is anchored to." }) })] }), "\n", _jsx(_components.h3, { id: "labelfontaddress", children: _jsx(_components.code, { children: "labelFontAddress" }) }), "\n", _jsx(_components.p, { children: "The address of the font that the label should use." }), "\n", _jsxs(_components.p, { children: ["If the current font does not support a specific character, the character will be displayed as a crossed out box (i.e. ", _jsx(_components.code, { children: "☒" }), ")."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-25", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "roboto", children: _jsxs(_components.p, { children: ["Specifies that the ", _jsx("a", { href: "https://fonts.google.com/specimen/Roboto", children: "Roboto" }), " font should be used. (default)"] }) }), _jsx(PossibleValueCode, { value: "noto-sans-kr", children: _jsxs(_components.p, { children: ["Specifies that the ", _jsx("a", { href: "https://fonts.google.com/specimen/Noto+Sans+KR", children: "Noto Sans KR" }), " font should be used.\nThis is a font with support for the Korean language."] }) }), _jsx(PossibleValue, { value: "Any URL", children: _jsxs(_components.p, { children: ["Specifies that the font to be used should be downloaded from the given URL.\nCurrently supports ", _jsx("a", { href: "https://en.wikipedia.org/wiki/Web_Open_Font_Format", children: "WOFF" }), " and ", _jsx("a", { href: "https://en.wikipedia.org/wiki/OpenType", children: "OTF" }), " fonts."] }) })] }), "\n", _jsx(_components.h3, { id: "labelwordwrapmode", children: _jsx(_components.code, { children: "labelWordWrapMode" }) }), "\n", _jsx(_components.p, { children: "The word wrapping mode that the label should use. Useful for automatically fitting the text onto the bot." }), "\n", _jsx(_components.h4, { id: "possible-values-are-26", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "breakCharacters", children: _jsx(_components.p, { children: "Line breaks may be inserted inside a word to fit the label on the bot. (default)" }) }), _jsx(PossibleValueCode, { value: "breakWords", children: _jsx(_components.p, { children: "Line breaks may be inserted between words to fit the label on the bot." }) }), _jsx(PossibleValue, { value: "none", children: _jsx(_components.p, { children: "Line breaks will not be inserted." }) })] }), "\n", _jsx(_components.h3, { id: "scale", children: _jsx(_components.code, { children: "scale" }) }), "\n", _jsx(Badges, { children: _jsx(VideoBadge, { url: "https://youtu.be/DOxixU-C_0g" }) }), "\n", _jsx(_components.p, { children: "The uniform scale of the bot." }), "\n", _jsx(_components.p, { children: "Defaults to 1." }), "\n", _jsx(_components.h3, { id: "scalex", children: _jsx(_components.code, { children: "scaleX" }) }), "\n", _jsx(Badges, { children: _jsx(VideoBadge, { url: "https://youtu.be/DOxixU-C_0g" }) }), "\n", _jsxs(_components.p, { children: ["The X scale (width) of the bot. Combines with the ", _jsx(TagLink, { tag: "scale" }), " tag to determine the final width of the bot."] }), "\n", _jsx(_components.p, { children: "Defaults to 1." }), "\n", _jsx(_components.h3, { id: "scaley", children: _jsx(_components.code, { children: "scaleY" }) }), "\n", _jsx(Badges, { children: _jsx(VideoBadge, { url: "https://youtu.be/DOxixU-C_0g" }) }), "\n", _jsxs(_components.p, { children: ["The Y scale (length) of the bot. Combines with the ", _jsx(TagLink, { tag: "scale" }), " tag to determine the final length of the bot.\nFor menu bots, you can use ", _jsx(_components.code, { children: "auto" }), ". This scales the bot's height to fit its label."] }), "\n", _jsx(_components.p, { children: "Defaults to 1." }), "\n", _jsx(_components.h3, { id: "scalez", children: _jsx(_components.code, { children: "scaleZ" }) }), "\n", _jsx(Badges, { children: _jsx(VideoBadge, { url: "https://youtu.be/DOxixU-C_0g" }) }), "\n", _jsxs(_components.p, { children: ["The Z scale (height) of the bot. Combines with the ", _jsx(TagLink, { tag: "scale" }), " tag to determine the final height of the bot."] }), "\n", _jsx(_components.p, { children: "Defaults to 1." }), "\n", _jsx(_components.h3, { id: "scalemode", children: _jsx(_components.code, { children: "scaleMode" }) }), "\n", _jsx(_components.p, { children: "How the form is scaled to fit inside the bot." }), "\n", _jsxs(_components.p, { children: ["Note that this setting does not affect ", _jsx(TagLink, { tag: "scale" }), ", ", _jsx(TagLink, { tag: "scaleX" }), ", ", _jsx(TagLink, { tag: "scaleY" }), " or ", _jsx(TagLink, { tag: "scaleZ" }), ".\nInstead, it changes how custom forms like meshes are scaled to fit inside the unit cube."] }), "\n", _jsx(_components.p, { children: "Also note that this setting affects a bot's collision volume. The collision volume will always try to wrap the bot's form to the best of its ability.\nThis means that if you have a really large mesh the collider will scale up to surround the mesh." }), "\n", _jsx(_components.h4, { id: "possible-values-are-27", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "fit", children: _jsx(_components.p, { children: "The form is scaled to fit inside the bot's unit cube. The aspect ratio will be preserved. (default)" }) }), _jsx(PossibleValueCode, { value: "absolute", children: _jsx(_components.p, { children: "The form is not scaled." }) })] }), "\n", _jsx(_components.h3, { id: "form", children: _jsx(_components.code, { children: "form" }) }), "\n", _jsx(_components.p, { children: "The shape that the bot should be displayed as." }), "\n", _jsx(_components.h4, { id: "possible-values-are-28", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "cube", children: _jsx(_components.p, { children: "Cube mesh (default)" }) }), _jsx(PossibleValueCode, { value: "skybox", children: _jsx(_components.p, { children: "A Sphere mesh optimal for "skybox" implementation." }) }), _jsx(PossibleValueCode, { value: "sphere", children: _jsx(_components.p, { children: "Sphere mesh" }) }), _jsx(PossibleValueCode, { value: "sprite", children: _jsx(_components.p, { children: "Camera facing (billboarded) sprite/quad images." }) }), _jsx(PossibleValueCode, { value: "mesh", children: _jsxs(_components.p, { children: ["A mesh loaded from the web. See ", _jsx(TagLink, { tag: "formSubtype" }), " for additional options."] }) }), _jsx(PossibleValueCode, { value: "frustum", children: _jsx(_components.p, { children: "A camera frustum mesh." }) }), _jsx(PossibleValueCode, { value: "helix", children: _jsx(_components.p, { children: "A double helix mesh (like DNA)." }) }), _jsx(PossibleValueCode, { value: "egg", children: _jsx(_components.p, { children: "A egg mesh." }) }), _jsx(PossibleValueCode, { value: "hex", children: _jsx(_components.p, { children: "A hexagon mesh." }) }), _jsx(PossibleValueCode, { value: "circle", children: _jsx(_components.p, { children: "A circle mesh." }) }), _jsx(PossibleValueCode, { value: "keyboard", children: _jsxs(_components.p, { children: ["An interactive keyboard. Clicking the keys will generate ", _jsx(TagLink, { tag: "@onKeyClick" }), " whispers that are sent to the bot."] }) }), _jsx(PossibleValueCode, { id: "iframe-form", value: "iframe", children: _jsxs(_components.p, { children: ["A webpage loaded into a 3D iframe. See ", _jsx(TagLink, { tag: "formSubtype" }), " for additional options."] }) }), _jsx(PossibleValueCode, { value: "dimension", children: _jsxs(_components.p, { children: ["The bot will display the dimension specified by ", _jsx(TagLink, { tag: "formAddress" }), "."] }) }), _jsx(PossibleValueCode, { value: "portal", children: _jsxs(_components.p, { children: ["The bot will display the dimension specified by ", _jsx(TagLink, { tag: "formAddress" }), ".\nThis is an alias for "dimension"."] }) }), _jsx(PossibleValueCode, { value: "spherePortal", children: _jsxs(_components.p, { children: ["The bot will display the dimension specified by ", _jsx(TagLink, { tag: "formAddress" }), " in a spherical manner, using the X and Y coordinates as latitude and longitude coordinates."] }) }), _jsx(PossibleValueCode, { value: "cursor", children: _jsx(_components.p, { children: "The bot will appear as a cursor in the multi-line editor.\nYou also need to place the bot in the same dimension that the tag portal uses\nfor the cursor to appear." }) }), _jsxs(PossibleValueCode, { value: "codeButton", children: [_jsx("p", { children: _jsx(_components.p, { children: "The bot will appear as a clickable button in the multi-line editor when placed in the same the same dimension that the tag portal uses. The bot will also need a label in order to appear." }) }), _jsx("p", { children: _jsx(_components.p, { children: "The Start position of the bot the line number that the button should appear above, and the End position specifies the priority of the button compared to other buttons on the same line (larger numbers indicate lower priorities)." }) }), _jsx("p", { children: _jsxs(_components.p, { children: ["Additionally, it is possible to display code buttons in the multi-line editor's context menu by setting the ", _jsx(NormalCode, { children: "#true" }), " tag to ", _jsx(NormalCode, { children: "true" }), ".\nIn this case, the ", _jsx(NormalCode, { children: "#true" }), " tag represents putting the codeButton in the code editor for every tag."] }) })] }), _jsxs(PossibleValueCode, { value: "codeHint", children: [_jsx("p", { children: _jsxs(_components.p, { children: ["The bot will appear as a hint in the multi-line editor when placed in the same the same dimension that the ", _jsx(GlossaryRef, { term: "tagPortal" }), " uses.\nIf a ", _jsx(TagLink, { tag: "color" }), " is specified, then the code that the hint covers will use the specified background color.\nIf a ", _jsx(TagLink, { tag: "strokeColor" }), " is specified, then the code that the hint covers will use the stroke as a box border around the code.\nIf given a ", _jsx(TagLink, { tag: "label" }), ", it will be rendered before the start position."] }) }), _jsx("p", { children: _jsxs(_components.p, { children: ["Use the ", _jsx(TagLink, { tag: "[dimension]Start" }), " and ", _jsx(TagLink, { tag: "[dimension]End" }), " tags to position the hint."] }) }), _jsx("p", { children: _jsxs(_components.p, { children: ["Additionally, codeHint bots support the ", _jsx(TagLink, { tag: "@onClick" }), " listener for when their label text is clicked."] }) })] }), _jsx(PossibleValueCode, { value: "input", children: _jsx(_components.p, { children: "The bot will appear as an input box in the menu portal.\nYou also need to place the bot in the dimension that the menu portal is showing for the input to appear." }) })] }), "\n", _jsx(_components.h3, { id: "formsubtype", children: _jsx(_components.code, { children: "formSubtype" }) }), "\n", _jsx(_components.p, { children: "The subtype that the form should use. Useful for specifying how a mesh should be loaded." }), "\n", _jsx(_components.h4, { id: "possible-values-are-29", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "No subtype (default)" }) }), _jsx(PossibleValueCode, { value: "gltf", children: _jsxs(_components.p, { children: ["A ", _jsx("a", { href: "https://en.wikipedia.org/wiki/GlTF", children: "GLTF mesh" }), " loaded from a URL."] }) }), _jsx(PossibleValueCode, { value: "html", children: _jsxs(_components.p, { children: ["The HTML code that should be loaded into an iframe when ", _jsx(TagLink, { tag: "form" }), " is set to iframe. (Default when ", _jsx(TagLink, { tag: "form" }), " is set to iframe)"] }) }), _jsx(PossibleValueCode, { value: "src", children: _jsxs(_components.p, { children: ["The URL that should be loaded into an iframe when ", _jsx(TagLink, { tag: "form" }), " is set to iframe."] }) })] }), "\n", _jsx(_components.h3, { id: "formaddress", children: _jsx(_components.code, { children: "formAddress" }) }), "\n", _jsx(_components.p, { children: "The address that the bot should represent data from." }), "\n", _jsxs(_components.p, { children: ["When ", _jsx(TagLink, { tag: "form" }), " is set to ", _jsx(_components.code, { children: "cube" }), ", ", _jsx(_components.code, { children: "skybox" }), ", ", _jsx(_components.code, { children: "sphere" }), ", or ", _jsx(_components.code, { children: "sprite" }), ", the address should be the URL of the image that the bot should display."] }), "\n", _jsxs(_components.p, { children: ["When ", _jsx(TagLink, { tag: "form" }), " is set to ", _jsx(_components.code, { children: "mesh" }), " and ", _jsx(TagLink, { tag: "formSubtype" }), " is set to ", _jsx(_components.code, { children: "gltf" }), ", the address should be the URL of the GLTF file that should be displayed."] }), "\n", _jsxs(_components.p, { children: ["When ", _jsx(TagLink, { tag: "form" }), " is set to ", _jsx(_components.code, { children: "iframe" }), " and ", _jsx(TagLink, { tag: "formSubtype" }), " is set to ", _jsx(_components.code, { children: "html" }), ", the address should be the HTML that should be displayed."] }), "\n", _jsxs(_components.p, { children: ["When ", _jsx(TagLink, { tag: "form" }), " is set to ", _jsx(_components.code, { children: "iframe" }), " and ", _jsx(TagLink, { tag: "formSubtype" }), " is set to ", _jsx(_components.code, { children: "src" }), ", the address should be the URL of the webpage that should be displayed."] }), "\n", _jsxs(_components.p, { children: ["When the bot is in the menu portal, this is the URL of the image or video that should be shown on the menu item.\nIt can also be ", _jsx(_components.code, { children: "cube" }), " to show an icon of a cube, ", _jsx(_components.code, { children: "egg" }), " to show an egg icon, and ", _jsx(_components.code, { children: "helix" }), " to show an icon of a DNA helix.\nIf the given value is not a URL or one of the predefined icons, then the specified ", _jsx(_components.a, { href: "https://material.io/resources/icons/?style=baseline", children: "Material Icon" }), " will be shown."] }), "\n", _jsx(_components.h3, { id: "formaddressaspectratio", children: _jsx(_components.code, { children: "formAddressAspectRatio" }) }), "\n", _jsxs(_components.p, { children: ["The aspect ratio that should be used to ensure that the image/video from ", _jsx(TagLink, { tag: "formAddress" }), " is displayed correctly.\nAspect ratio is the numerical ratio representing the width of an image divided by the height. For example, a 1080p image has a resolution of 1920x1080 which means it has an aspect ratio of 1920/1080 = 16/9 = ~1.7777777."] }), "\n", _jsxs(_components.p, { children: ["By default, CasualOS displays all images with an aspect ratio of 1. An aspect ratio of 1 ensures that the entire bot is covered, but if the original image has a different aspect ratio then it will appear distorted.\nTo solve this, you can use the ", _jsx(TagLink, { tag: "formAddressAspectRatio" }), " tag to ensure that the aspect ratio that the image is displayed at matches the original aspect ratio."] }), "\n", _jsx(_components.p, { children: "Also note that negative aspect ratios will mirror the image horizontally." }), "\n", _jsxs(_components.p, { children: ["Currently only supported by the ", _jsx(_components.code, { children: "cube" }), ", ", _jsx(_components.code, { children: "circle" }), ", and ", _jsx(_components.code, { children: "sprite" }), " forms."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-30", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "1", children: _jsx(_components.p, { children: "Square aspect ratio. (default)" }) }), _jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Custom aspect ratio." }) })] }), "\n", _jsx(_components.h3, { id: "formanimation", children: _jsx(_components.code, { children: "formAnimation" }) }), "\n", _jsx(_components.p, { children: "The name of the animation that the mesh should play.\nOnly works for mesh forms." }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "Play the first animation." }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "Stops animating the mesh." }) }), _jsx(PossibleValue, { value: "Any String", children: _jsx(_components.p, { children: "Play the animation with the given name." }) }), _jsx(PossibleValue, { value: "Any Integer >= 0", children: _jsx(_components.p, { children: "Play the animation at the given index.\nUseful for exploring possible animations if you don't have the name." }) }), _jsx(PossibleValue, { value: "An array of numbers or strings", children: _jsx(_components.p, { children: "Plays the given list of animations in sequence.\nThe last animation will loop forever." }) })] }), "\n", _jsx(_components.h3, { id: "formanimationaddress", children: _jsx(_components.code, { children: "formAnimationAddress" }) }), "\n", _jsx(_components.p, { children: "The URL that the animations for the mesh should be loaded from.\nFor GLTF forms, this should be the URL of the GLTF file that contains the animations that should be used for the mesh." }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "Use the animations that were built into the mesh." }) }), _jsx(PossibleValue, { value: "Any URL", children: _jsx(_components.p, { children: "Use the animations from the given GLTF file." }) })] }), "\n", _jsx(_components.h3, { id: "formopacity", children: _jsx(_components.code, { children: "formOpacity" }) }), "\n", _jsx(_components.p, { children: "The opacity of the bot's form. Allows bots to be semi-transparent." }), "\n", _jsx(_components.h4, { id: "possible-values-are-31", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "1", children: _jsx(_components.p, { children: "(default)" }) }), _jsx(PossibleValue, { value: "Any Number >= 0 and <= 1", children: _jsx(_components.p, { children: "The bot's form will use the given opacity." }) })] }), "\n", _jsx(_components.h3, { id: "formrenderorder", children: _jsx(_components.code, { children: "formRenderOrder" }) }), "\n", _jsx(_components.p, { children: "The render order that should be used for this bot in the grid portals.\nSetting this property to a value other than 0 overrides the automatically calculated render order which is based on the distance of each bot to the portal camera." }), "\n", _jsxs(_components.p, { children: ["It is not recommended to use this tag unless you are dealing with transparency issues caused by overlapping PNG ", _jsx(TagLink, { tag: "formAddress" }), " images."] }), "\n", _jsx(_components.p, { children: "Higher values mean the bot will be rendered first, and lower values means the bot will be rendered last." }), "\n", _jsx(_components.h4, { id: "possible-values-are-32", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "0", children: _jsx(_components.p, { children: "Use the automatic render ordering. (Default)" }) }), _jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Use the given render ordering. Bots are rendered from the highest value to the lowest value." }) })] }), "\n", _jsx(_components.h3, { id: "gltfversion", children: _jsx(_components.code, { children: "gltfVersion" }) }), "\n", _jsx(_components.p, { children: "The GLTF specification version that should be used to load a GLTF model." }), "\n", _jsx(_components.h4, { id: "possible-values-are-33", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "2", children: _jsx(_components.p, { children: "Load the GLTF model with version 2 of the specification. (default)" }) }), _jsx(PossibleValue, { value: "Numbers < 2", children: _jsxs(_components.p, { children: ["Load the GLTF Model with version 1 of the specification.\nThis is useful for loading meshes from ", _jsx("a", { href: "https://poly.google.com", children: "poly.google.com" }), "."] }) })] }), "\n", _jsx(_components.h3, { id: "progressbar", children: _jsx(_components.code, { children: "progressBar" }) }), "\n", _jsx(_components.p, { children: "Causes a progress bar to be shown for the bot. Range is between 0 and 1.\nNeeds both progressBarBackgroundColor and progressBarColor to visualize the progress" }), "\n", _jsx(_components.h4, { id: "possible-values-are-34", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Numbers >= 0 and <= 1", children: _jsxs("ul", { children: [_jsx("li", { children: _jsxs(_components.p, { children: ["0 means that you will only see ", _jsx(TagLink, { tag: "progressBarBackgroundColor" }), "."] }) }), _jsx("li", { children: _jsxs(_components.p, { children: ["0.5 means that you will see half of ", _jsx(TagLink, { tag: "progressBarBackgroundColor" }), " and half of ", _jsx(TagLink, { tag: "progressBarColor" }), "."] }) }), _jsx("li", { children: _jsxs(_components.p, { children: ["1 means that you will only see ", _jsx(TagLink, { tag: "progressBarColor" }), "."] }) })] }) }) }), "\n", _jsx(_components.h3, { id: "progressbarcolor", children: _jsx(_components.code, { children: "progressBarColor" }) }), "\n", _jsx(_components.p, { children: "The foreground color of the progress bar." }), "\n", _jsx(_components.h4, { id: "possible-values-are-35", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "black", children: _jsx(_components.p, { children: "(default)" }) }), _jsx(AnyColorValues, {})] }), "\n", _jsx(_components.h3, { id: "progressbarbackgroundcolor", children: _jsx(_components.code, { children: "progressBarBackgroundColor" }) }), "\n", _jsx(_components.p, { children: "The background color of the progress bar." }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "white", children: _jsx(_components.p, { children: "(default)" }) }), _jsx(AnyColorValues, {})] }), "\n", _jsx(_components.h3, { id: "progressbarposition", children: _jsx(_components.code, { children: "progressBarPosition" }) }), "\n", _jsx(_components.p, { children: "The anchor position for the progress bar." }), "\n", _jsx(_components.h4, { id: "possible-values-are-36", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(LabelAnchorValues, {}) }), "\n", _jsx(_components.h3, { id: "anchorpoint", children: _jsx(_components.code, { children: "anchorPoint" }) }), "\n", _jsx(_components.p, { children: "The position that the bot form should rotate and scale around." }), "\n", _jsx(_components.h4, { id: "possible-values-are-37", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "bottom", children: _jsx(_components.p, { children: "The bot rotates and scales around its bottom point. (default)" }) }), _jsx(PossibleValueCode, { value: "center", children: _jsx(_components.p, { children: "The bot rotates and scales around its center point." }) }), _jsx(PossibleValueCode, { value: "front", children: _jsx(_components.p, { children: "The bot rotates and scales around the point at the center of the Bot's front face." }) }), _jsx(PossibleValueCode, { value: "back", children: _jsx(_components.p, { children: "The bot rotates and scales around the point at the center of the Bot's back face." }) }), _jsx(PossibleValueCode, { value: "top", children: _jsx(_components.p, { children: "The bot rotates and scales around its top point." }) }), _jsx(PossibleValueCode, { value: "left", children: _jsx(_components.p, { children: "The bot rotates and scales around the point at the center of the Bot's left face." }) }), _jsx(PossibleValueCode, { value: "right", children: _jsx(_components.p, { children: "The bot rotates and scales around the point at the center of the Bot's right face." }) }), _jsx(PossibleValueCode, { value: "[x,y,z]", children: _jsx(_components.p, { children: "The bot rotates and scales around the specified point.\nShould be an array of 3 numbers representing X, Y, and Z respectively.\nNumbers between 0.5 and -0.5 map to the edges of the bot." }) }), _jsx(PossibleValue, { value: "Any 3D Vector", children: _jsx(_components.p, { children: "The bot rotates and scales around the specified point.\nShould be a 3D bot vector representing X, Y, and Z respectively.\nNumbers between 0.5 and -0.5 map to the edges of the bot." }) })] }), "\n", _jsx(_components.h3, { id: "orientationmode", children: _jsx(_components.code, { children: "orientationMode" }) }), "\n", _jsx(_components.p, { children: "The mode that determines how the bot automatically rotates." }), "\n", _jsx(_components.h4, { id: "possible-values-are-38", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "absolute", children: _jsx(_components.p, { children: "The bot does not rotate automatically. (default)" }) }), _jsx(PossibleValueCode, { value: "billboard", children: _jsx(_components.p, { children: "The bot rotates left, right, up, and down automatically to point its top face towards the player." }) }), _jsx(PossibleValueCode, { value: "billboardTop", children: _jsx(_components.p, { children: "The bot rotates left and right automatically to point its top face towards the player." }) }), _jsx(PossibleValueCode, { value: "billboardFront", children: _jsx(_components.p, { children: "The bot rotates left and right automatically to point its front face towards the player." }) })] }), "\n", _jsx(_components.h3, { id: "maxlodthreshold", children: _jsx(_components.code, { children: "maxLODThreshold" }) }), "\n", _jsxs(_components.p, { children: ["The minimum percentage of the screen that the bot form should take up in order to enter the maximum Level-Of-Detail.\nWhen the maximum LOD is entered the ", _jsx(TagLink, { tag: "@onMaxLODEnter" }), " listener is triggered.\nWhen the maximum LOD is exited the ", _jsx(TagLink, { tag: "@onMaxLODExit" }), " listener is triggered."] }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "0.03", children: _jsx(_components.p, { children: "The bot enters the maximum LOD when it takes up 3% of the screen space. (default)" }) }), _jsx(PossibleValue, { value: "Numbers > 0 and < 1", children: _jsx(_components.p, { children: "The bot enters the maximum LOD when it takes up more screen space than the value." }) })] }), "\n", _jsx(_components.h3, { id: "minlodthreshold", children: _jsx(_components.code, { children: "minLODThreshold" }) }), "\n", _jsxs(_components.p, { children: ["The maximum percentage of the screen that the bot form should take up in order to enter the minimum Level-Of-Detail.\nWhen the minimum LOD is entered the ", _jsx(TagLink, { tag: "@onMinLODEnter" }), " listener is triggered.\nWhen the minimum LOD is exited the ", _jsx(TagLink, { tag: "@onMinLODExit" }), " listener is triggered."] }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "0.0005", children: _jsx(_components.p, { children: "The bot enters the minimum LOD when it takes up 0.05% of the screen space. (default)" }) }), _jsx(PossibleValue, { value: "Numbers > 0 and < 1", children: _jsx(_components.p, { children: "The bot enters the minimum LOD when it takes up less screen space than the value." }) })] }), "\n", _jsx(_components.h3, { id: "transformer", children: _jsx(_components.code, { children: "transformer" }) }), "\n", _jsx(_components.p, { children: "The ID of the bot that should transform this bot in the bot and miniGridPortals.\nWhen the transformer bot and this bot are in the same dimension, this bot will inherit the position and rotation of the transformer bot." }), "\n", _jsxs(_components.p, { children: ["When set on a portal bot (like ", _jsx(_components.code, { children: "gridPortalBot" }), "), this will transform the portal camera by the specified bot."] }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The bot is positioned on the grid. (default)" }) }), _jsx(PossibleValue, { value: "Any String", children: _jsx(_components.p, { children: "The bot is positioned on the bot with the given ID." }) })] }), "\n", _jsx(_components.h3, { id: "menuitemstyle", children: _jsx(_components.code, { children: "menuItemStyle" }) }), "\n", _jsxs(_components.p, { children: ["The custom ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS", children: "CSS styles" }), " that should be applied to the menu item.\nOnly applies to bots that are being shown in the menu portal."] }), "\n", _jsxs(_components.p, { children: ["This is useful for positioning and styling the item in ways that are not possible using normal tags.\nOverridden by conflicting properties like ", _jsx(TagLink, { tag: "color" }), " or ", _jsx(TagLink, { tag: "labelColor" }), "."] }), "\n", _jsx(_components.p, { children: "When setting this tag via the sheet, it is useful to utilize DNA tags to ensure that the resulting value is considered an object." }), "\n", _jsx(_components.h4, { id: "possible-values-are-39", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "No special styling. (Default)" }) }), _jsx(PossibleValue, { value: "Any Object", children: _jsx(_components.p, { children: "The properties of the object will be applied as special styling to the menu item." }) })] }), "\n", _jsx(_components.h4, { id: "examples-1", children: "Examples:" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsx(_components.li, { children: "Round the top corners of the menu bot." }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", children: "🧬{\n "border-radius": "8px 8px 0 0",\n "margin-top": "8px"\n}\n" }) }), "\n", _jsx(_components.h3, { id: "menuitemlabelstyle", children: _jsx(_components.code, { children: "menuItemLabelStyle" }) }), "\n", _jsxs(_components.p, { children: ["The custom ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS", children: "CSS styles" }), " that should be applied to the menu item label.\nOnly applies to bots that are being shown in the menu portal."] }), "\n", _jsxs(_components.p, { children: ["This is useful for styling the label in ways that are not possible using normal tags.\nOverrides conflicting properties like ", _jsx(TagLink, { tag: "color" }), " or ", _jsx(TagLink, { tag: "labelColor" }), "."] }), "\n", _jsx(_components.p, { children: "When setting this tag via the sheet, it is useful to utilize DNA tags to ensure that the resulting value is considered an object." }), "\n", _jsxs(_components.p, { children: ["Note: when using a larger font size you may also need to increase the ", _jsx(_components.code, { children: "line-height" }), ". The default ", _jsx(_components.code, { children: "line-height" }), " is "24px"."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-40", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "No special styling. (Default)" }) }), _jsx(PossibleValue, { value: "Any Object", children: _jsx(_components.p, { children: "The properties of the object will be applied as special styling to the menu item." }) })] }), "\n", _jsx(_components.h4, { id: "examples-2", children: "Examples:" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsx(_components.li, { children: "Use custom font settings on the menu bot label." }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", children: "🧬{\n "font-size": "36px",\n "line-height": "36px",\n "font-weight": "bold"\n}\n" }) }), "\n", _jsx(_components.h3, { id: "menuitemhovermode", children: _jsx(_components.code, { children: "menuItemHoverMode" }) }), "\n", _jsx(_components.p, { children: "The mode that menu items should use when the cursor hovers over the bot when it is in the menu portal.\nCurrently only affects menu bots that are buttons (input bots are not hoverable)." }), "\n", _jsxs(_components.p, { children: ["Note that this only determines how the menu item looks when the mouse pointer hovers over the item.\nIt does not affect the ", _jsx(TagLink, { tag: "@onClick" }), ", ", _jsx(TagLink, { tag: "@onPointerEnter" }), ", ", _jsx(TagLink, { tag: "@onPointerExit" }), ", etc. listeners."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-41", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "auto", children: _jsxs(_components.p, { children: ["The bot will appear hoverable if it has a ", _jsx(TagLink, { tag: "@onClick" }), " tag. (Default)"] }) }), _jsx(PossibleValueCode, { value: "hover", children: _jsx(_components.p, { children: "The bot will appear hoverable." }) }), _jsx(PossibleValueCode, { value: "none", children: _jsx(_components.p, { children: "The bot will not appear hoverable." }) })] }), "\n", _jsx(_components.h3, { id: "menuitemtext", children: _jsx(_components.code, { children: "menuItemText" }) }), "\n", _jsxs(_components.p, { children: ["The text that has been entered in the menu item's input box. Only has an effect on menu items that have ", _jsx(TagLink, { tag: "form" }), " set to ", _jsx(_components.code, { children: "input" }), "."] }), "\n", _jsxs(_components.p, { children: ["This tag will also be updated in the ", _jsx(_components.code, { children: "tempLocal" }), " space when the user types in the input box."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-42", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "No text in the input box. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "No text in the input box.\nCasualOS will use this when the user has deleted all the text from the input box and there is a non-null value\nin the menuItemText tag." }) }), _jsx(PossibleValue, { value: "Any String", children: _jsx(_components.p, { children: "The text will appear in the input box." }) })] }), "\n", _jsx(_components.h3, { id: "menuitemshowsubmitwhenempty", children: _jsx(_components.code, { children: "menuItemShowSubmitWhenEmpty" }) }), "\n", _jsxs(_components.p, { children: ["Whether to show the submit button on input menu items even if the input box is empty. Only has an effect on menu items that have ", _jsx(TagLink, { tag: "form" }), " set to ", _jsx(_components.code, { children: "input" }), "."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-43", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The submit button will only show when the input box is not empty. (Default)" }) }), _jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The submit button will always show." }) })] }), "\n", _jsx(_components.h2, { id: "dimension-tags", children: "Dimension Tags" }), "\n", _jsx(_components.h3, { id: "dimension", children: _jsx(_components.code, { children: "[dimension]" }) }), "\n", _jsx(_components.p, { children: "Add a bot to a dimension." }), "\n", _jsxs(_components.blockquote, { children: ["\n", _jsxs(_components.p, { children: [_jsx(_components.strong, { children: "Example:" }), " Set ", _jsx(_components.code, { children: "#room1" }), " to ", _jsx(_components.code, { children: "true" }), " for the bot to appear in a dimension named ", _jsx(_components.code, { children: "room1" }), "."] }), "\n"] }), "\n", _jsx(_components.h4, { id: "possible-values-are-44", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "Removes the bot from the dimension. (default)" }) }), _jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "Puts the bot into the dimension." }) })] }), "\n", _jsx(_components.h3, { id: "dimensionsortorder", children: _jsx(_components.code, { children: "[dimension]SortOrder" }) }), "\n", _jsx(_components.p, { children: "The order that the bot should be in a stack of bots." }), "\n", _jsx(_components.p, { children: "When bots are stacked, they are placed from the bottom to the top based on the sort order. So a bot with a sort order of 1 is going to be placed on top of a bot with a sort order of 2." }), "\n", _jsx(_components.h4, { id: "possible-values-are-45", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Specifies the sort order of a bot in a stack of bots. (Default is 0)" }) }) }), "\n", _jsx(_components.h3, { id: "dimensionposition", children: _jsx(_components.code, { children: "[dimension]Position" }) }), "\n", _jsxs(_components.p, { children: ["The vector position of a bot on the grid in the specified dimension.\nMust be a vector type. If not specified or the value is not a vector, then ", _jsx(TagLink, { tag: "[dimension]X" }), ", ", _jsx(TagLink, { tag: "[dimension]Y" }), ", and ", _jsx(TagLink, { tag: "[dimension]Z" }), " will be used."] }), "\n", _jsx(_components.p, { children: "Integer values are mapped directly to the grid. e.g. 1.5 means halfway between the 1 and 2 grid squares." }), "\n", _jsx(_components.h4, { id: "possible-values-are-46", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "➡️0,0,0", children: _jsx(_components.p, { children: "The bot will be placed in the center of the grid. (Default)" }) }), _jsx(PossibleValue, { value: "Any Vector", children: _jsx(_components.p, { children: "Specifies the X, Y, and Z position of a bot in a dimension." }) })] }), "\n", _jsx(_components.h4, { id: "examples-3", children: "Examples" }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", metastring: "title='Place this bot at (1, 2, 3) in the home dimension.'", children: "tags.homePosition = new Vector3(1, 2, 3);\n" }) }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", metastring: "title='Toast the position of this bot in the home dimension.'", children: "const homePosition = getBotPosition(thisBot, 'home');\nos.toast('home Position: ' + homePosition);\n" }) }), "\n", _jsx(_components.h3, { id: "dimensionx", children: _jsx(_components.code, { children: "[dimension]X" }) }), "\n", _jsx(_components.p, { children: "The X (east-west) position of a bot on the grid in the specified dimension." }), "\n", _jsx(_components.p, { children: "Integer values are mapped directly to the grid. e.g. 1.5 means halfway between the 1 and 2 grid squares." }), "\n", _jsx(_components.h4, { id: "possible-values-are-47", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Specifies the X position of a bot in a dimension. (Default is 0)" }) }) }), "\n", _jsx(_components.h3, { id: "dimensiony", children: _jsx(_components.code, { children: "[dimension]Y" }) }), "\n", _jsx(_components.p, { children: "The Y (north-south) position of a bot on the grid in the specified dimension." }), "\n", _jsx(_components.p, { children: "Integer values are mapped directly to the grid. e.g. 1.5 means halfway between the 1 and 2 grid squares." }), "\n", _jsx(_components.h4, { id: "possible-values-are-48", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Specifies the Y position of a bot in a dimension. (Default is 0)" }) }) }), "\n", _jsx(_components.h3, { id: "dimensionz", children: _jsx(_components.code, { children: "[dimension]Z" }) }), "\n", _jsx(_components.p, { children: "The Z (up-down) offset that the bot is offset above/below the grid." }), "\n", _jsx(_components.h4, { id: "possible-values-are-49", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Specifies the Z position of a bot in a dimension. (Default is 0)" }) }) }), "\n", _jsx(_components.h3, { id: "dimensionrotation", children: _jsx(_components.code, { children: "[dimension]Rotation" }) }), "\n", _jsxs(_components.p, { children: ["The rotation in that the bot should be oriented by in the specified dimension.\nMust be a rotation type. If not specified or the value is not a rotation, then ", _jsx(TagLink, { tag: "[dimension]RotationX" }), ", ", _jsx(TagLink, { tag: "[dimension]RotationY" }), ", and ", _jsx(TagLink, { tag: "[dimension]RotationZ" }), " will be used."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-50", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "🔁0,0,0,1", children: _jsx(_components.p, { children: "The bot will be placed flat on the grid. (Default)" }) }), _jsx(PossibleValue, { value: "Any Rotation", children: _jsx(_components.p, { children: "Specifies the rotation of a bot in a dimension." }) })] }), "\n", _jsx(_components.h4, { id: "examples-4", children: "Examples:" }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", metastring: "title='Rotate this bot by 90 degrees around the X axis in the home dimension'", children: "tags.homeRotation = new Rotation({\n axis: new Vector3(1, 0, 0),\n angle: Math.PI / 2\n});\n" }) }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", metastring: "title='Toast the rotation of this bot in the home dimension'", children: "const homeRotation = getBotRotation(thisBot, 'home');\nos.toast('home Rotation: ' + homeRotation);\n" }) }), "\n", _jsx(_components.h4, { id: "possible-values-are-51", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Specifies the X rotation of a bot in a dimension. (Default is 0)" }) }) }), "\n", _jsx(_components.h3, { id: "dimensionrotationx", children: _jsx(_components.code, { children: "[dimension]RotationX" }) }), "\n", _jsx(_components.p, { children: "The X (pitch) rotation in radians that the bot should be rotated by." }), "\n", _jsx(_components.h4, { id: "possible-values-are-52", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Specifies the X rotation of a bot in a dimension. (Default is 0)" }) }) }), "\n", _jsx(_components.h3, { id: "dimensionrotationy", children: _jsx(_components.code, { children: "[dimension]RotationY" }) }), "\n", _jsx(_components.p, { children: "The Y (roll) rotation in radians that the bot should be rotated by." }), "\n", _jsx(_components.h4, { id: "possible-values-are-53", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Specifies the Y rotation of a bot in a dimension. (Default is 0)" }) }) }), "\n", _jsx(_components.h3, { id: "dimensionrotationz", children: _jsx(_components.code, { children: "[dimension]RotationZ" }) }), "\n", _jsx(_components.p, { children: "The Z (yaw) rotation in radians that the bot should be rotated by." }), "\n", _jsx(_components.h4, { id: "possible-values-are-54", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Specifies the Z rotation of a bot in a dimension. (Default is 0)" }) }) }), "\n", _jsx(_components.h3, { id: "dimensionstart", children: _jsx(_components.code, { children: "[dimension]Start" }) }), "\n", _jsx(_components.p, { children: "The start value for bots that are in the multi-line editor (tag portal/sheet portal)." }), "\n", _jsxs(_components.p, { children: ["For ", _jsx(_components.code, { children: "cursor" }), " bots, this value indicates the character index that selection starts at."] }), "\n", _jsxs(_components.p, { children: ["For ", _jsx(_components.code, { children: "codeButton" }), " bots, this value indicates the line number that the button should appear above."] }), "\n", _jsxs(_components.p, { children: ["For ", _jsx(_components.code, { children: "codeHint" }), " bots, this value can indicate the character index that the hint starts at. Alternatively, it can indicate the line and column numbers that the hint starts at."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-55", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Specifies the value at which the bot starts in the dimension. (Default is 0)" }) }), _jsx(PossibleValue, { value: "Any Vector", children: _jsx(_components.p, { children: "Specifies the line (x component) and column (y component) that the hint starts at. Only applicable to codeHint bots." }) })] }), "\n", _jsx(_components.h3, { id: "dimensionend", children: _jsx(_components.code, { children: "[dimension]End" }) }), "\n", _jsx(_components.p, { children: "The end value for bots that are in the multi-line editor (tag portal/sheet portal)." }), "\n", _jsxs(_components.p, { children: ["For ", _jsx(_components.code, { children: "cursor" }), " bots, this value indicates the character index that the selection stops at."] }), "\n", _jsxs(_components.p, { children: ["The ", _jsx(_components.code, { children: "codeButton" }), " bots, this value indicates the priority for the button. Priority determines the order that buttons on the same line are shown in. (Higher numbers means lower priority)"] }), "\n", _jsxs(_components.p, { children: ["For ", _jsx(_components.code, { children: "codeHint" }), " bots, this value can indicate the character index that the hint end at. Alternatively, it can indicate the line and column numbers that the hint end at."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-56", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValue, { value: "Any Number", children: _jsx(_components.p, { children: "Specifies the index at which the bot ends in the dimension. (Default is 0)" }) }), _jsx(PossibleValue, { value: "Any Vector", children: _jsx(_components.p, { children: "Specifies the line (x component) and column (y component) that the hint ends at. Only applicable to codeHint bots." }) })] }), "\n", _jsx(_components.h2, { id: "portal-bot-tags", children: "Portal Bot Tags" }), "\n", _jsx(_components.p, { children: "These tags are used to configure portals.\nThey can be set on the corresponding portal bot." }), "\n", _jsxs(_components.p, { children: ["Some of them are automatically set by the corresponding portal but most of them (like the ", _jsx(_components.code, { children: "cameraPositionOffset" }), " tags) can be changed manually."] }), "\n", _jsx(_components.h3, { id: "portalcolor", children: _jsx(_components.code, { children: "portalColor" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The color of the background of the portal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-57", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "#263238", children: _jsx(_components.p, { children: "(default)" }) }), _jsx(AnyColorValues, {})] }), "\n", _jsx(_components.h3, { id: "portalcursor", children: _jsx(_components.code, { children: "portalCursor" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsxs(_components.p, { children: ["The cursor that should be used when the mouse is hovered over the portal.\nThe portal cursor is overriden when a bot with a ", _jsx(TagLink, { tag: "cursor" }), " tag is hovered."] }), "\n", _jsx(_components.p, { children: "Note that when using a custom cursor image, the image should be 32x32 pixels or smaller.\nThis is because that is the largest cursor image size that some operating systems support." }), "\n", _jsx(_components.h4, { id: "possible-values-are-58", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(AnyCursorValues, {}) }), "\n", _jsx(_components.h3, { id: "portalcursorhotspot", children: _jsx(_components.code, { children: "portalCursorHotspot" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The X position of the pixel in the cursor image that is the "hotspot".\nThat is, the pixel which represents the point or tip of the cursor." }), "\n", _jsx(_components.p, { children: "The top left of the image is (0, 0)." }), "\n", _jsx(_components.h4, { id: "possible-values-are-59", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "➡️0,0", children: "(default)" }), _jsx(PossibleValue, { value: "Any Vector > ➡️0,0", children: "The position that the cursor hotspot should be at." })] }), "\n", _jsx(_components.h3, { id: "portalbackgroundaddress", children: _jsx(_components.code, { children: "portalBackgroundAddress" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The URL of the image or video that should be displayed as the background of the portal." }), "\n", _jsxs(_components.p, { children: ["When specified, this tag overrides ", _jsx(TagLink, { tag: "#portalColor" }), ".\nAdditionally, this tag does nothing when in VR."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-60", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "(default)" }) }), _jsx(PossibleValue, { value: "Any URL", children: _jsx(_components.p, { children: "Specifies that the portal background should use the given image or video." }) }), _jsx(PossibleValueCode, { value: ""casualos://camera-feed"", children: _jsx(_components.p, { children: "Display a feed of the main camera as the background." }) }), _jsx(PossibleValueCode, { value: ""casualos://camera-feed/rear"", children: _jsx(_components.p, { children: "Display a feed of the rear (environment) facing camera as the background." }) }), _jsx(PossibleValueCode, { value: ""casualos://camera-feed/front"", children: _jsx(_components.p, { children: "Display a feed of the front (user) facing camera as the background." }) })] }), "\n", _jsx(_components.h3, { id: "portallocked", children: _jsx(_components.code, { children: "portalLocked" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "Determines if the portal can be loaded." }), "\n", _jsx(_components.h4, { id: "possible-values-are-61", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The portal can be loaded. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The portal cannot be loaded." }) })] }), "\n", _jsx(_components.h3, { id: "portalpannable", children: _jsx(_components.code, { children: "portalPannable" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "Whether the player will be able to pan the camera inside the portal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-62", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The camera is pannable in this portal. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The camera is not pannable in this portal." }) })] }), "\n", _jsx(_components.h3, { id: "portalpannablemin", children: _jsx(_components.code, { children: "portalPannableMin" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The minimum values that the camera can pan to in the portal." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#vector-tags", children: "Vectors" }), " for more info."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-63", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Vector", children: _jsx(_components.p, { children: "Minimum X and Y values that the camera can pan to. (Default is Negative Infinity)" }) }) }), "\n", _jsx(_components.h3, { id: "portalpannablemax", children: _jsx(_components.code, { children: "portalPannableMax" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The maximum X and Y values that the camera can pan to in the portal." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#vector-tags", children: "Vectors" }), " for more info."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-64", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Vector", children: _jsx(_components.p, { children: "Maximum X and Y values that the camera can pan to. (Default is Infinity)" }) }) }), "\n", _jsx(_components.h3, { id: "portalrotatable", children: _jsx(_components.code, { children: "portalRotatable" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "Whether the player will be able to rotate the camera inside the miniGridPortal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-65", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The miniGridPortal is rotatable. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The miniGridPortal is not rotatable." }) })] }), "\n", _jsx(_components.h3, { id: "portalcamerarotation", children: _jsx(_components.code, { children: "portalCameraRotation" }) }), "\n", _jsxs(Badges, { children: [_jsx(Example, { code: "portalCameraRotation" }), _jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The up and down rotation that the camera starts at in the portal. Units are in radians." }), "\n", _jsxs(_components.p, { children: ["Because the bot and miniGridPortals use ", _jsx(_components.a, { href: "https://en.wikipedia.org/wiki/Polar_coordinate_system", children: "polar coordinates" }), " to orbit around the focus point, we only need two numbers to specify where the camera should be pointing.\nPolar coordinates work by specifying two angles (X and Y - also known as "phi" and "theta") which position the camera around its focus point.\nTherefore, these rotation values actually cause the camera to turn around the focus point and not simply turn the camera itself."] }), "\n", _jsxs(_components.p, { children: ["The X angle (phi) is used to rotate the camera up and down. Mathematically, a value of 0 means the camera is facing directly down and a value of ", _jsx(_components.code, { children: "π / 2" }), " means the camera is perfectly parallel with the ground.\nFor usability reasons, CasualOS limits this value to between 0 and 58 degrees (", _jsx(_components.code, { children: "~1.01229" }), " radians)."] }), "\n", _jsxs(_components.p, { children: ["The Y angle (theta) is used to rotate the camera left and right. Mathematically, a value of 0 means the camera is facing the front face of bots and a value of ", _jsx(_components.code, { children: "π / 2" }), " means the camera is facing the left face of the bots."] }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#vector-tags", children: "Vectors" }), " for more info."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-66", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Vector", children: _jsx(_components.p, { children: "The X and Y rotation values that should be used for the initial camera rotation.\nUnits are in radians." }) }) }), "\n", _jsx(_components.h3, { id: "portalzoomable", children: _jsx(_components.code, { children: "portalZoomable" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "Whether the player will be able to zoom the camera inside the portal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-67", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The camera is zoomable in this portal. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The camera is not zoomable in this portal." }) })] }), "\n", _jsx(_components.h3, { id: "portalzoomablemin", children: _jsx(_components.code, { children: "portalZoomableMin" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {}), _jsx(MapPortalBadge, {}), _jsx(MiniMapPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The minimum value that the camera can zoom to in the portal. Does not affect VR/AR sessions.\nFor the mapPortal and miniMapPortal, the value is measured in meters." }), "\n", _jsx(_components.h4, { id: "possible-values-are-68", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "Minimum value that the camera zoom to. (Default is 0.4 for the grid portals and -Infinity for the map portals)" }) }) }), "\n", _jsx(_components.h3, { id: "portalzoomablemax", children: _jsx(_components.code, { children: "portalZoomableMax" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {}), _jsx(MapPortalBadge, {}), _jsx(MiniMapPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The maximum value that the camera can zoom to in the portal. Does not affect VR/AR sessions.\nFor the mapPortal and miniMapPortal, the value is measured in meters." }), "\n", _jsx(_components.h4, { id: "possible-values-are-69", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "Maximum value that the camera can zoom to. (Default is 80 for the grid portals and EARTH_RADIUS * 4 for the map portals)" }) }) }), "\n", _jsx(_components.h3, { id: "portalcamerazoom", children: _jsx(_components.code, { children: "portalCameraZoom" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The zoom value that the camera starts at in the portal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-70", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "The initial zoom value. (Default is 1)" }) }) }), "\n", _jsx(_components.h3, { id: "portalgridscale", children: _jsx(_components.code, { children: "portalGridScale" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The size of bots in the portal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-71", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "The size of bots in the portal. (Default is 0.025 for wrist portals and 0.2 for all other portals)" }) }) }), "\n", _jsx(_components.h3, { id: "portalsurfacescale", children: _jsx(_components.code, { children: "portalSurfaceScale" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The scale of surfaces." }), "\n", _jsx(_components.h4, { id: "possible-values-are-72", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "The scale of surface for the dimension. (Default is 2)" }) }) }), "\n", _jsx(_components.h3, { id: "portalcameracontrols", children: _jsx(_components.code, { children: "portalCameraControls" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The mode that specifies how the camera controls work in the portal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-73", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: ""player"", children: _jsxs(_components.p, { children: ["Specifies that the player should be able to control the camera.\nIndividual options like ", _jsx(TagLink, { tag: "portalZoomable" }), " override this option."] }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "Specifies that the player should not be able to control the camera in the portal." }) })] }), "\n", _jsx(_components.h3, { id: "portalshowfocuspoint", children: _jsx(_components.code, { children: "portalShowFocusPoint" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "Whether the focus point of the portal camera should be shown as a small sphere." }), "\n", _jsx(_components.p, { children: "The focus point is the position that the camera orbits (rotates) around and is always facing." }), "\n", _jsx(_components.p, { children: "When a bot is between the focus point and the camera, then focus events will trigger." }), "\n", _jsx(_components.h4, { id: "possible-values-are-74", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "Don't show an indicator for the focus point. (Default)" }) }), _jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "Show an indicator for the focus point." }) })] }), "\n", _jsx(_components.h3, { id: "portalcameratype", children: _jsx(_components.code, { children: "portalCameraType" }) }), "\n", _jsx(Badges, { children: _jsx(GridPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "The type of camera that should be used for the portal.\nThe "type" of a camera determines how objects are visualized and how they appear. Conceptually, camera types are similar to camera lenses." }), "\n", _jsx(_components.h4, { id: "possible-values-are-75", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "orthographic", children: _jsx(_components.p, { children: "The camera uses an orthographic projection.\nThis camera type preserves parallel lines so lines that are parallel to each other will remain parallel in the 2D image.\nAs a consequence, objects that are the same size always appear the same size no matter how far away they are from the camera. (Default)" }) }), _jsx(PossibleValueCode, { value: "perspective", children: _jsx(_components.p, { children: "The camera uses a perspective projection.\nThis camera type makes objects appear larger or smaller based on how far away they are from the camera." }) })] }), "\n", _jsx(_components.h3, { id: "portaldisablecanvastransparency", children: _jsx(_components.code, { children: "portalDisableCanvasTransparency" }) }), "\n", _jsx(Badges, { children: _jsx(GridPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["Whether to disable transparency on the ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas", children: "canvas element" }), " that the 3D content is displayed on."] }), "\n", _jsxs(_components.p, { children: ["Set this tag to ", _jsx(_components.code, { children: "true" }), " on the grid portal to fix rendering issues with 3D models that use alpha cutoff.\nNote that when this value is ", _jsx(_components.code, { children: "true" }), ", ", _jsx(_components.a, { href: "#iframe-form", children: "iframe forms" }), " will cease to function properly."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-76", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "false", children: _jsxs(_components.p, { children: ["The canvas element is transparent to support ", _jsx("a", { href: "#iframe-form", children: "iframe forms" }), ". (Default)"] }) }), _jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The canvas element is not transparent 3D models that use alpha cutoff." }) })] }), "\n", _jsx(_components.h3, { id: "miniportalheight", children: _jsx(_components.code, { children: "miniPortalHeight" }) }), "\n", _jsxs(Badges, { children: [_jsx(MiniGridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "Sets the initial height of the viewport for the miniGridPortal/miniMapPortal." }), "\n", _jsxs(_components.p, { children: ["This should be the percentage of the "available screen height" that the miniGridPortal/miniMapPortal should take.\nThe "available screen height" is a portion of the full screen calculated such that when there is some space left between the left and right edges of the screen\nthere will be some space at the bottom of the portal. However, when the ", _jsx(TagLink, { tag: "miniPortalWidth" }), " tag is set to 1, there will be no space between the bottom\nof the screen and the bottom of the portal."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-77", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Numbers >= 0 and <= 1", children: _jsx(_components.p, { children: "The percentage of the screen height that the portal should take. (Default is 0.2)" }) }) }), "\n", _jsx(_components.h3, { id: "miniportalwidth", children: _jsx(_components.code, { children: "miniPortalWidth" }) }), "\n", _jsxs(Badges, { children: [_jsx(MiniGridPortalBadge, {}), _jsx(MiniMapPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "Sets the width of the viewport for the miniGridPortal/miniMapPortal.\nThis should be a percentage between 0 and 1 that specifies how much of the screen width should be taken." }), "\n", _jsx(_components.h4, { id: "possible-values-are-78", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Numbers >= 0 and <= 1", children: _jsx(_components.p, { children: "The percentage of the screen width that the portal should take. (Default is 0.8)" }) }) }), "\n", _jsx(_components.h3, { id: "miniportalresizable", children: _jsx(_components.code, { children: "miniPortalResizable" }) }), "\n", _jsxs(Badges, { children: [_jsx(MiniGridPortalBadge, {}), _jsx(MiniMapPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "Whether the player will be able to resize the viewport for the miniGridPortal/miniMapPortal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-79", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The portal is resizable. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The portal is not resizable." }) })] }), "\n", _jsx(_components.h3, { id: "mapportalbasemap", children: _jsx(_components.code, { children: "mapPortalBasemap" }) }), "\n", _jsxs(Badges, { children: [_jsx(MapPortalBadge, {}), _jsx(MiniMapPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "Sets the style of the bottom layer of the map in the mapPortal/miniMapPortal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-80", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "dark-gray", children: _jsx(_components.p, { children: "(Default)" }) }), _jsx(PossibleValue, { value: "Any Basemap", children: _jsxs(_components.p, { children: ["See ", _jsx("a", { target: "_blank", href: "https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html#basemap", children: "this" }), " for a full list."] }) })] }), "\n", _jsx(_components.h3, { id: "wristportalheight", children: _jsx(_components.code, { children: "wristPortalHeight" }) }), "\n", _jsxs(Badges, { children: [_jsx(LeftWristPortalBadge, {}), _jsx(RightWristPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The number of grid spaces that the wrist portal should have in the Y direction." }), "\n", _jsx(_components.h4, { id: "possible-values-are-81", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Numbers >= 1", children: _jsx(_components.p, { children: "The number of of grid spaces that the portal should have in the Y direction. (Default is 6)" }) }) }), "\n", _jsx(_components.h3, { id: "wristportalwidth", children: _jsx(_components.code, { children: "wristPortalWidth" }) }), "\n", _jsxs(Badges, { children: [_jsx(LeftWristPortalBadge, {}), _jsx(RightWristPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The number of grid spaces that the wrist portal should have in the X direction." }), "\n", _jsx(_components.h4, { id: "possible-values-are-82", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Numbers >= 1", children: _jsx(_components.p, { children: "The number of of grid spaces that the portal should have in the X direction. (Default is 6)" }) }) }), "\n", _jsx(_components.h3, { id: "meetportalvisible", children: _jsx(_components.code, { children: "meetPortalVisible" }) }), "\n", _jsx(Badges, { children: _jsx(MeetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "Whether the meet portal should be visible.\nThis is useful for hiding the meet portal while still in a meeting." }), "\n", _jsx(_components.h4, { id: "possible-values-are-83", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The meet portal will be visible. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The meet portal will be hidden." }) })] }), "\n", _jsx(_components.h3, { id: "meetportalanchorpoint", children: _jsx(_components.code, { children: "meetPortalAnchorPoint" }) }), "\n", _jsx(Badges, { children: _jsx(MeetPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The position on the screen that the meet portal should be anchored to.\nOverrides any conflicting properties set by ", _jsx(TagLink, { tag: "meetPortalStyle" }), "."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-84", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "fullscreen", children: _jsx(_components.p, { children: "The meet portal will occupy the entire screen. (Default)" }) }), _jsx(PossibleValueCode, { value: "top", children: _jsx(_components.p, { children: "The meet portal will occupy the top of the screen." }) }), _jsx(PossibleValueCode, { value: "topRight", children: _jsx(_components.p, { children: "The meet portal will occupy the top-right corner of the screen." }) }), _jsx(PossibleValueCode, { value: "topLeft", children: _jsx(_components.p, { children: "The meet portal will occupy the top-left corner of the screen." }) }), _jsx(PossibleValueCode, { value: "bottom", children: _jsx(_components.p, { children: "The meet portal will occupy the bottom of the screen." }) }), _jsx(PossibleValueCode, { value: "bottomRight", children: _jsx(_components.p, { children: "The meet portal will occupy the bottom-right corner of the screen." }) }), _jsx(PossibleValueCode, { value: "bottomLeft", children: _jsx(_components.p, { children: "The meet portal will occupy the bottom-left corner of the screen." }) }), _jsx(PossibleValueCode, { value: "left", children: _jsx(_components.p, { children: "The meet portal will occupy the left side of the screen." }) }), _jsx(PossibleValueCode, { value: "right", children: _jsx(_components.p, { children: "The meet portal will occupy the right side of the screen." }) }), _jsx(PossibleValueCode, { value: "[top, right, bottom, left]", children: _jsxs(_components.p, { children: ["The meet portal will use the given values for the CSS ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/top", children: "top" }), ",\n", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/right", children: "right" }), ", ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/left", children: "left" }), ",\nand ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/bottom", children: "bottom" }), " properties of the container."] }) })] }), "\n", _jsx(_components.h3, { id: "meetportalstyle", children: _jsx(_components.code, { children: "meetPortalStyle" }) }), "\n", _jsx(Badges, { children: _jsx(MeetPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The custom ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS", children: "CSS styles" }), " that should be applied to the meet portal container.\nThis is useful for positioning the meet portal in ways that are not possible using ", _jsx(TagLink, { tag: "meetPortalAnchorPoint" }), ".\nOverridden by conflicting properties set by ", _jsx(TagLink, { tag: "meetPortalAnchorPoint" }), "."] }), "\n", _jsx(_components.p, { children: "When setting this tag via the sheet, it is useful to utilize DNA tags to ensure that the resulting value is considered an object." }), "\n", _jsx(_components.h4, { id: "possible-values-are-85", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "No special styling. (Default)" }) }), _jsx(PossibleValue, { value: "Any Object", children: _jsx(_components.p, { children: "The properties of the object will be applied as special styling to the meet portal container." }) })] }), "\n", _jsx(_components.h4, { id: "examples-5", children: "Examples" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsx(_components.li, { children: "Put the meet portal in the center of the screen." }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { children: "🧬{\n "top": "10%",\n "bottom": "10%",\n "left": "10%",\n "right": "10%",\n}\n" }) }), "\n", _jsx(_components.h3, { id: "meetportalprejoinenabled", children: _jsx(_components.code, { children: "meetPortalPrejoinEnabled" }) }), "\n", _jsx(Badges, { children: _jsx(MeetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "Whether the meet portal should have the prejoin screen enabled.\nThe prejoin screen is where the user can setup their display name, microphone, camera, and other settings, before actually joining the meet." }), "\n", _jsx(_components.h4, { id: "possible-values-are-86", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The prejoin screen is enabled. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The prejoin screen is disabled." }) })] }), "\n", _jsx(_components.h3, { id: "meetportalstartwithvideomuted", children: _jsx(_components.code, { children: "meetPortalStartWithVideoMuted" }) }), "\n", _jsx(Badges, { children: _jsx(MeetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "Whether the meet portal should start with video muted. Video in this context is equivalent to the user's camera." }), "\n", _jsx(_components.h4, { id: "possible-values-are-87", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The meet portal starts with video muted. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The meet portal starts with video unmuted." }) })] }), "\n", _jsx(_components.h3, { id: "meetportalstartwithaudiomuted", children: _jsx(_components.code, { children: "meetPortalStartWithAudioMuted" }) }), "\n", _jsx(Badges, { children: _jsx(MeetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "Whether the meet portal should start with audio muted. Audio in this context is equivalent to the user's microphone." }), "\n", _jsx(_components.h4, { id: "possible-values-are-88", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The meet portal starts with audio muted." }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The meet portal starts with audio unmuted. (Default)" }) })] }), "\n", _jsx(_components.h3, { id: "meetportalrequiredisplayname", children: _jsx(_components.code, { children: "meetPortalRequireDisplayName" }) }), "\n", _jsx(Badges, { children: _jsx(MeetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "Whether the meet portal should require the user define a display name." }), "\n", _jsx(_components.h4, { id: "possible-values-are-89", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The meet portal requires a user display name. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The meet portal does not require a user display name." }) })] }), "\n", _jsx(_components.h3, { id: "meetportaldisableprivatemessages", children: _jsx(_components.code, { children: "meetPortalDisablePrivateMessages" }) }), "\n", _jsx(Badges, { children: _jsx(MeetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "Whether the meet portal should hide the option to send private chat messages to other participants." }), "\n", _jsx(_components.h4, { id: "possible-values-are-90", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "The meet portal allows sending private messages to other participants. (Default)" }) }), _jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The meet portal hides the option to start a new private message chat with another participant.\nReplies to private messages are still allowed." }) })] }), "\n", _jsx(_components.h3, { id: "meetportallanguage", children: _jsx(_components.code, { children: "meetPortalLanguage" }) }), "\n", _jsx(Badges, { children: _jsx(MeetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "The language that should be used for the meet portal interface by default.\nOnly works if this tag is set before the meet portal is loaded." }), "\n", _jsx(_components.h4, { id: "possible-values-are-91", children: "Possible Values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The user-configured value will be used for the meetPortal interface. (Default)" }) }), _jsx(PossibleValue, { value: "Any ISO 639-1 Code", children: _jsxs(_components.p, { children: ["The interface will use the given ", _jsx("a", { href: "https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes", children: "ISO 639-1" }), " language code.\nNote that not all langauge codes are supported. The full list of supported translations can be found ", _jsx("a", { href: "https://github.com/jitsi/jitsi-meet/tree/master/lang", children: "here" }), "."] }) })] }), "\n", _jsx(_components.h3, { id: "meetportaljwt", children: _jsx(_components.code, { children: "meetPortalJWT" }) }), "\n", _jsx(Badges, { children: _jsx(MeetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "The JSON Web Token (JWT) that should be used to join the meeting.\nUsed to give the current user moderator permissions." }), "\n", _jsx(_components.h4, { id: "possible-values-are-92", children: "Possible Values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The user will be a normal user in the meet portal. (Default)" }) }), _jsx(PossibleValue, { value: "Any String", children: _jsx(_components.p, { children: "The user will use the JWT for authentication in the meet portal.\nDepending on the settings used to create the JWT, this may make the user a moderator." }) })] }), "\n", _jsx(_components.h3, { id: "botportalanchorpoint", children: _jsx(_components.code, { children: "botPortalAnchorPoint" }) }), "\n", _jsx(Badges, { children: _jsx(BotPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The position on the screen that the bot portal should be anchored to.\nOverrides any conflicting properties set by ", _jsx(TagLink, { tag: "botPortalStyle" })] }), "\n", _jsx(_components.h4, { id: "possible-values-are-93", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "fullscreen", children: _jsx(_components.p, { children: "The bot portal will occupy the entire screen. (Default)" }) }), _jsx(PossibleValueCode, { value: "top", children: _jsx(_components.p, { children: "The bot portal will occupy the top of the screen." }) }), _jsx(PossibleValueCode, { value: "topRight", children: _jsx(_components.p, { children: "The bot portal will occupy the top-right corner of the screen." }) }), _jsx(PossibleValueCode, { value: "topLeft", children: _jsx(_components.p, { children: "The bot portal will occupy the top-left corner of the screen." }) }), _jsx(PossibleValueCode, { value: "bottom", children: _jsx(_components.p, { children: "The bot portal will occupy the bottom of the screen." }) }), _jsx(PossibleValueCode, { value: "bottomRight", children: _jsx(_components.p, { children: "The bot portal will occupy the bottom-right corner of the screen." }) }), _jsx(PossibleValueCode, { value: "bottomLeft", children: _jsx(_components.p, { children: "The bot portal will occupy the bottom-left corner of the screen." }) }), _jsx(PossibleValueCode, { value: "left", children: _jsx(_components.p, { children: "The bot portal will occupy the left side of the screen." }) }), _jsx(PossibleValueCode, { value: "right", children: _jsx(_components.p, { children: "The bot portal will occupy the right side of the screen." }) }), _jsx(PossibleValueCode, { value: "[top, right, bottom, left]", children: _jsxs(_components.p, { children: ["The bot portal will use the given values for the CSS ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/top", children: "top" }), ",\n", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/right", children: "right" }), ", ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/left", children: "left" }), ",\nand ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/bottom", children: "bottom" }), " properties of the container."] }) })] }), "\n", _jsx(_components.h3, { id: "botportalstyle", children: _jsx(_components.code, { children: "botPortalStyle" }) }), "\n", _jsx(Badges, { children: _jsx(BotPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The custom ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS", children: "CSS styles" }), " that should be applied to the bot portal container.\nThis is useful for positioning the tag portal in ways that are not possible using ", _jsx(TagLink, { tag: "botPortalAnchorPoint" }), ".\nOverridden by conflicting properties set by ", _jsx(TagLink, { tag: "botPortalAnchorPoint" }), "."] }), "\n", _jsx(_components.p, { children: "When setting this tag via the sheet, it is useful to utilize DNA tags to ensure that the resulting value is considered an object." }), "\n", _jsx(_components.h4, { id: "possible-values-are-94", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "No special styling. (Default)" }) }), _jsx(PossibleValue, { value: "Any Object", children: _jsx(_components.p, { children: "The properties of the object will be applied as special styling to the bot portal container." }) })] }), "\n", _jsx(_components.h4, { id: "examples-6", children: "Examples" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsx(_components.li, { children: "Put the bot portal in the center of the screen." }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { children: "🧬{\n "top": "10%",\n "bottom": "10%",\n "left": "10%",\n "right": "10%",\n}\n" }) }), "\n", _jsx(_components.h3, { id: "tagportalanchorpoint", children: _jsx(_components.code, { children: "tagPortalAnchorPoint" }) }), "\n", _jsx(Badges, { children: _jsx(TagPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The position on the screen that the tag portal should be anchored to.\nOverrides any conflicting properties set by ", _jsx(TagLink, { tag: "tagPortalStyle" }), "."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-95", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "fullscreen", children: _jsx(_components.p, { children: "The tag portal will occupy the entire screen. (Default)" }) }), _jsx(PossibleValueCode, { value: "top", children: _jsx(_components.p, { children: "The tag portal will occupy the top of the screen." }) }), _jsx(PossibleValueCode, { value: "topRight", children: _jsx(_components.p, { children: "The tag portal will occupy the top-right corner of the screen." }) }), _jsx(PossibleValueCode, { value: "topLeft", children: _jsx(_components.p, { children: "The tag portal will occupy the top-left corner of the screen." }) }), _jsx(PossibleValueCode, { value: "bottom", children: _jsx(_components.p, { children: "The tag portal will occupy the bottom of the screen." }) }), _jsx(PossibleValueCode, { value: "bottomRight", children: _jsx(_components.p, { children: "The tag portal will occupy the bottom-right corner of the screen." }) }), _jsx(PossibleValueCode, { value: "bottomLeft", children: _jsx(_components.p, { children: "The tag portal will occupy the bottom-left corner of the screen." }) }), _jsx(PossibleValueCode, { value: "left", children: _jsx(_components.p, { children: "The tag portal will occupy the left side of the screen." }) }), _jsx(PossibleValueCode, { value: "right", children: _jsx(_components.p, { children: "The tag portal will occupy the right side of the screen." }) }), _jsx(PossibleValueCode, { value: "[top, right, bottom, left]", children: _jsxs(_components.p, { children: ["The tag portal will use the given values for the CSS ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/top", children: "top" }), ",\n", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/right", children: "right" }), ", ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/left", children: "left" }), ",\nand ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS/bottom", children: "bottom" }), " properties of the container."] }) })] }), "\n", _jsx(_components.h3, { id: "tagportalstyle", children: _jsx(_components.code, { children: "tagPortalStyle" }) }), "\n", _jsx(Badges, { children: _jsx(TagPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The custom ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS", children: "CSS styles" }), " that should be applied to the tag portal container.\nThis is useful for positioning the tag portal in ways that are not possible using ", _jsx(TagLink, { tag: "tagPortalAnchorPoint" }), ".\nOverridden by conflicting properties set by ", _jsx(TagLink, { tag: "tagPortalAnchorPoint" }), "."] }), "\n", _jsx(_components.p, { children: "When setting this tag via the sheet, it is useful to utilize DNA tags to ensure that the resulting value is considered an object." }), "\n", _jsx(_components.h4, { id: "possible-values-are-96", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "No special styling. (Default)" }) }), _jsx(PossibleValue, { value: "Any Object", children: _jsx(_components.p, { children: "The properties of the object will be applied as special styling to the tag portal container." }) })] }), "\n", _jsx(_components.h4, { id: "examples-7", children: "Examples" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsx(_components.li, { children: "Put the tag portal in the center of the screen." }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { children: "🧬{\n "top": "10%",\n "bottom": "10%",\n "left": "10%",\n "right": "10%",\n}\n" }) }), "\n", _jsx(_components.h3, { id: "tagportalshowbutton", children: _jsx(_components.code, { children: "tagPortalShowButton" }) }), "\n", _jsx(Badges, { children: _jsx(TagPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "Whether the tag portal should show a button that allows a custom action.\nWhen set to true, the button will be displayed in the lower right hand corner of the tag portal." }), "\n", _jsxs(_components.p, { children: ["Clicking the button will trigger a ", _jsx(TagLink, { tag: "@onClick" }), " on the tag portal config bot."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-97", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "No button is shown. (Default)" }) }), _jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The button is shown." }) })] }), "\n", _jsx(_components.h3, { id: "tagportalbuttonicon", children: _jsx(_components.code, { children: "tagPortalButtonIcon" }) }), "\n", _jsx(Badges, { children: _jsx(TagPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The ", _jsx(_components.a, { href: "https://material.io/resources/icons/?style=baseline", children: "Material Icon" }), " that should be shown on the tag portal button."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-98", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValue, { value: "Empty String", children: _jsx(_components.p, { children: "No icon. (Default)" }) }), _jsx(PossibleValue, { value: "Any Material Icon", children: _jsxs(_components.p, { children: ["See ", _jsx("a", { href: "https://material.io/resources/icons/?style=baseline", children: _jsx(_components.a, { href: "https://material.io/resources/icons/?style=baseline", children: "https://material.io/resources/icons/?style=baseline" }) }), "."] }) })] }), "\n", _jsx(_components.h3, { id: "tagportalbuttonhint", children: _jsx(_components.code, { children: "tagPortalButtonHint" }) }), "\n", _jsx(Badges, { children: _jsx(TagPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The ", _jsx(_components.a, { href: "https://en.wikipedia.org/wiki/Tooltip", children: "tooltip" }), " that should be shown on the tag portal button."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-99", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValue, { value: "Empty String", children: _jsx(_components.p, { children: "No hint. (Default)" }) }), _jsx(PossibleValue, { value: "Any String", children: _jsx(_components.p, { children: "The text that should be displayed as a hint when the user hovers their mouse over the button." }) })] }), "\n", _jsx(_components.h3, { id: "menuportalstyle", children: _jsx(_components.code, { children: "menuPortalStyle" }) }), "\n", _jsxs(Badges, { children: [_jsx(Example, { code: "menuPortalStyle" }), _jsx(MenuPortalBadge, {})] }), "\n", _jsxs(_components.p, { children: ["The custom ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/CSS", children: "CSS styles" }), " that should be applied to the menu portal container.\nThis is useful for positioning the menu portal in ways that are not possible normally."] }), "\n", _jsx(_components.p, { children: "When setting this tag via the sheet, it is useful to utilize DNA tags to ensure that the resulting value is considered an object." }), "\n", _jsx(_components.h4, { id: "possible-values-are-100", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "No special styling. (Default)" }) }), _jsx(PossibleValue, { value: "Any Object", children: _jsx(_components.p, { children: "The properties of the object will be applied as special styling to the menu portal container." }) })] }), "\n", _jsx(_components.h4, { id: "examples-8", children: "Examples" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsxs(_components.li, { children: ["Make the menu portal ", _jsx(_components.code, { children: "80%" }), " of the screen width."] }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { children: "🧬{\n "width": "80%",\n}\n" }) }), "\n", _jsx(_components.h3, { id: "sheetportalshowbutton", children: _jsx(_components.code, { children: "sheetPortalShowButton" }) }), "\n", _jsx(Badges, { children: _jsx(SheetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "Whether the sheet portal should show a button that allows a custom action.\nWhen set to true, the button will be displayed in the lower right hand corner of the sheet portal." }), "\n", _jsxs(_components.p, { children: ["Clicking the button will trigger a ", _jsx(TagLink, { tag: "@onClick" }), " on the sheet portal config bot.\nIf there is no ", _jsx(_components.code, { children: "@onClick" }), ", then the sheet portal will be closed."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-101", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "The button is shown. (Default)" }) }), _jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "No button is shown." }) })] }), "\n", _jsx(_components.h3, { id: "sheetportalbuttonicon", children: _jsx(_components.code, { children: "sheetPortalButtonIcon" }) }), "\n", _jsx(Badges, { children: _jsx(SheetPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The ", _jsx(_components.a, { href: "https://material.io/resources/icons/?style=baseline", children: "Material Icon" }), " that should be shown on the sheet portal button."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-102", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValue, { value: "web_asset", children: _jsx(_components.p, { children: "The Web Asset icon. (Default)" }) }), _jsx(PossibleValue, { value: "Any Material Icon", children: _jsxs(_components.p, { children: ["See ", _jsx("a", { href: "https://material.io/resources/icons/?style=baseline", children: _jsx(_components.a, { href: "https://material.io/resources/icons/?style=baseline", children: "https://material.io/resources/icons/?style=baseline" }) }), "."] }) })] }), "\n", _jsx(_components.h3, { id: "sheetportalbuttonhint", children: _jsx(_components.code, { children: "sheetPortalButtonHint" }) }), "\n", _jsx(Badges, { children: _jsx(SheetPortalBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The ", _jsx(_components.a, { href: "https://en.wikipedia.org/wiki/Tooltip", children: "tooltip" }), " that should be shown on the sheet portal button."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-103", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "Grid Portal", children: _jsx(_components.p, { children: ""Grid Portal" (Default)" }) }), _jsx(PossibleValue, { value: "Any String", children: _jsx(_components.p, { children: "The text that should be displayed as a hint when the user hovers their mouse over the button." }) })] }), "\n", _jsx(_components.h3, { id: "sheetportalallowedtags", children: _jsx(_components.code, { children: "sheetPortalAllowedTags" }) }), "\n", _jsx(Badges, { children: _jsx(SheetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "The list of tags that should be allowed in the sheet portal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-104", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "All tags are allowed. (Default)" }) }), _jsx(PossibleValue, { value: "Any Array", children: _jsx(_components.p, { children: "Only the specified tags can be shown in the sheet portal." }) })] }), "\n", _jsx(_components.h3, { id: "sheetportaladdedtags", children: _jsx(_components.code, { children: "sheetPortalAddedTags" }) }), "\n", _jsx(Badges, { children: _jsx(SheetPortalBadge, {}) }), "\n", _jsx(_components.p, { children: "The list of tags that should be shown in the sheet even if they do not have a value." }), "\n", _jsx(_components.h4, { id: "possible-values-are-105", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "No additional tags are shown. (Default)" }) }), _jsx(PossibleValue, { value: "Any Array", children: _jsx(_components.p, { children: "The specified tags are shown in the sheet portal." }) })] }), "\n", _jsx(_components.h3, { id: "pixelwidth", children: _jsx(_components.code, { children: "pixelWidth" }) }), "\n", _jsxs(Badges, { children: [_jsx(AutomaticBadge, {}), _jsx(GridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The width of the grid portal in pixels. Because the miniGridPortal is contained by the grid portal, this value also applies to the miniGridPortal." }), "\n", _jsx(_components.p, { children: "Note that a device with a larger pixel value is not necessarily physically larger than a device with a smaller pixel value.\nAdditionally, a device with a larger width than height does not necessarily mean that it is in landscape mode." }), "\n", _jsxs(_components.p, { children: ["Finally, ", _jsx(TagLink, { tag: "pixelHeight" }), " and ", _jsx(TagLink, { tag: "pixelWidth" }), " use CSS pixels which are dependent on the ", _jsx(TagLink, { tag: "defaultPixelRatio" }), " specified by the web browser.\nYou can find the physical pixel width of the device by calculating ", _jsx(_components.code, { children: "pixelWidth * defaultPixelRatio" }), "."] }), "\n", _jsx(_components.h3, { id: "pixelheight", children: _jsx(_components.code, { children: "pixelHeight" }) }), "\n", _jsxs(Badges, { children: [_jsx(AutomaticBadge, {}), _jsx(GridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The height of the grid portal in pixels. Because the miniGridPortal is contained by the grid portal, this value also applies to the miniGridPortal." }), "\n", _jsx(_components.p, { children: "Note that a device with a larger pixel value is not necessarily physically larger than a device with a smaller pixel value.\nAdditionally, a device with a larger height than width does not necessarily mean that it is in portrait mode." }), "\n", _jsxs(_components.p, { children: ["Finally, ", _jsx(TagLink, { tag: "pixelHeight" }), " and ", _jsx(TagLink, { tag: "pixelWidth" }), " use CSS pixels which are dependent on the ", _jsx(TagLink, { tag: "defaultPixelRatio" }), " specified by the web browser.\nYou can find the physical pixel width of the device by calculating ", _jsx(_components.code, { children: "pixelHeight * defaultPixelRatio" }), "."] }), "\n", _jsx(_components.h3, { id: "pixelratio", children: _jsx(_components.code, { children: "pixelRatio" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio", children: "pixel ratio" }), " that should be used to determine how many physical pixels should be used to draw each pixel in the 3D portals.\nHigher values will make the 3D portals appear smoother but will also cause CausalOS to run slower."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-106", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "Use the default pixel ratio. (Default)" }) }), _jsx(PossibleValue, { value: "Any Number > 0", children: _jsx(_components.p, { children: "The pixel ratio that should be used." }) })] }), "\n", _jsx(_components.h3, { id: "defaultpixelratio", children: _jsx(_components.code, { children: "defaultPixelRatio" }) }), "\n", _jsxs(Badges, { children: [_jsx(AutomaticBadge, {}), _jsx(ConfigBotBadge, {})] }), "\n", _jsxs(_components.p, { children: ["The ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio", children: "pixel ratio" }), " that is used when the ", _jsx(TagLink, { tag: "pixelRatio" }), " tag is not set.\nThis value is determined by the web browser and cannot be changed. High resolution/Retina displays tend to have a pixel ratio of 2 or higher\nwhile devices with lower resolution displays tend to have a pixel ratio of 1."] }), "\n", _jsx(_components.h3, { id: "pointerpixel", children: _jsx(_components.code, { children: "pointerPixel" }) }), "\n", _jsxs(Badges, { children: [_jsx(AutomaticBadge, {}), _jsx(GridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The X and Y position (location along width) of the pointer (usually mouse, but can also be the position of the first finger to touch the screen) in the grid portal in pixels." }), "\n", _jsx(_components.p, { children: "Larger X values are closer to the right of the screen and lower values are closer to the left part of the screen." }), "\n", _jsx(_components.p, { children: "Larger Y values are closer to the bottom of the screen and lower values are closer to the top part of the screen." }), "\n", _jsx(_components.h3, { id: "cameraposition", children: _jsx(_components.code, { children: "cameraPosition" }) }), "\n", _jsxs(Badges, { children: [_jsx(AutomaticBadge, {}), _jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The 3D position of the player's camera in the grid portal." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#vector-tags", children: "Vectors" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "camerapositionoffset", children: _jsx(_components.code, { children: "cameraPositionOffset" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The offset that should be applied to the 3D position of the player's camera in the grid portal." }), "\n", _jsx(_components.p, { children: "Useful for moving the player around in VR." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#vector-tags", children: "Vectors" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "camerarotation", children: _jsx(_components.code, { children: "cameraRotation" }) }), "\n", _jsxs(Badges, { children: [_jsx(AutomaticBadge, {}), _jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The 3D rotation of the player's camera in the grid portal." }), "\n", _jsx(_components.p, { children: "Units are in radians." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#rotation-tags", children: "Rotations" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "camerarotationoffset", children: _jsx(_components.code, { children: "cameraRotationOffset" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The offset that should be applied to the 3D rotation of the player's camera in the grid portal." }), "\n", _jsx(_components.p, { children: "Units are in radians." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#rotation-tags", children: "Rotations" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "camerazoom", children: _jsx(_components.code, { children: "cameraZoom" }) }), "\n", _jsxs(Badges, { children: [_jsx(AutomaticBadge, {}), _jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The zoom value that the camera is at. This is an arbitrary value that specifies how far the camera is zoomed in or out." }), "\n", _jsx(_components.p, { children: "Larger values indicate that the camera is zoomed in more (objects appear bigger) and smaller values indicate that the camera is zoomed out (objects appear smaller)." }), "\n", _jsx(_components.h3, { id: "camerazoomoffset", children: _jsx(_components.code, { children: "cameraZoomOffset" }) }), "\n", _jsxs(Badges, { children: [_jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The offset that should be applied to the camera zoom. You can use this to change the zoom of the camera." }), "\n", _jsx(_components.p, { children: "Larger values indicate that the camera is zoomed in more (objects appear bigger) and smaller values indicate that the camera is zoomed out (objects appear smaller)." }), "\n", _jsx(_components.h3, { id: "camerafocus", children: _jsx(_components.code, { children: "cameraFocus" }) }), "\n", _jsxs(Badges, { children: [_jsx(AutomaticBadge, {}), _jsx(GridPortalBadge, {}), _jsx(MiniGridPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The 3D position of the focus point for the player's camera in the grid portal." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#vector-tags", children: "Vectors" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "imusupported", children: _jsx(_components.code, { children: "imuSupported" }) }), "\n", _jsxs(Badges, { children: [_jsx(AutomaticBadge, {}), _jsx(ImuPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "Whether IMU data is supported on this device." }), "\n", _jsx(_components.h3, { id: "devicerotation", children: _jsx(_components.code, { children: "deviceRotation" }) }), "\n", _jsxs(Badges, { children: [_jsx(AutomaticBadge, {}), _jsx(ImuPortalBadge, {})] }), "\n", _jsx(_components.p, { children: "The 3D rotation of the device as determined by the IMU." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#rotation-tags", children: "Rotations" }), " for more info."] }), "\n", _jsx(_components.h2, { id: "history-tags", children: "History Tags" }), "\n", _jsxs(_components.p, { children: ["History tags are tags that are automatically applied to bots in the ", _jsx(_components.code, { children: "history" }), " space."] }), "\n", _jsx(_components.h3, { id: "history", children: _jsx(_components.code, { children: "history" }) }), "\n", _jsx(Badges, { children: _jsx(HistoryBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["Whether the bot is in the ", _jsx(_components.code, { children: "history" }), " dimension."] }), "\n", _jsx(_components.h3, { id: "markhash", children: _jsx(_components.code, { children: "markHash" }) }), "\n", _jsx(Badges, { children: _jsx(HistoryBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The ", _jsx(_components.a, { href: "https://en.wikipedia.org/wiki/SHA-2", children: "SHA-256" }), " hash that the mark represents."] }), "\n", _jsx(_components.h3, { id: "previousmarkhash", children: _jsx(_components.code, { children: "previousMarkHash" }) }), "\n", _jsx(Badges, { children: _jsx(HistoryBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The ", _jsx(TagLink, { tag: "markHash" }), " of the mark that was created before this mark.\nYou can use this tag as a way to find previous marks from a mark."] }), "\n", _jsx(_components.h3, { id: "marktime", children: _jsx(_components.code, { children: "markTime" }) }), "\n", _jsx(Badges, { children: _jsx(HistoryBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The time that the mark was created." }), "\n", _jsx(_components.h2, { id: "config-bot-tags", children: "Config bot Tags" }), "\n", _jsxs(_components.p, { children: ["All tags on the config bot will be synced with the URL query parameters.\nThis means that setting the ", _jsx(_components.code, { children: "#abc" }), " tag on the config bot to ", _jsx(_components.code, { children: "hello" }), " will update the URL to include ", _jsx(_components.code, { children: "abc=hello" }), ".\nIt also means that putting ", _jsx(_components.code, { children: "miniGridPortal=myDimension" }), " into the query string will set the ", _jsx(TagLink, { tag: "miniGridPortal" }), " tag to ", _jsx(_components.code, { children: "myDimension" }), "."] }), "\n", _jsx(_components.h3, { id: "inst", children: _jsx(_components.code, { children: "inst" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The instance that is loaded into CasualOS." }), "\n", _jsx(_components.h3, { id: "theme", children: _jsx(_components.code, { children: "theme" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The theme that CasualOS should use." }), "\n", _jsx(_components.h4, { id: "possible-values-are-107", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "CasualOS is displayed with a color theme matching the system default. (Default)" }) }), _jsx(PossibleValue, { value: "light", children: _jsx(_components.p, { children: "CasualOS is displayed with a white-like-paper color theme." }) }), _jsx(PossibleValue, { value: "dark", children: _jsx(_components.p, { children: "CasualOS is displayed with a dark theme." }) })] }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h3, { id: "gridportal", children: _jsx(_components.code, { children: "gridPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The dimension that is loaded into the ", _jsx(GlossaryRef, { term: "gridPortal", children: "'grid' portal" }), " in CasualOS.\nThis is the portal that is loaded by default.\nOnly available on the config bot."] }), "\n", _jsx(_components.h3, { id: "minigridportal", children: _jsx(_components.code, { children: "miniGridPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The dimension that is loaded into the "mini" portal in CasualOS.\nOnly available on the config bot." }), "\n", _jsx(_components.h3, { id: "sheetportal", children: _jsx(_components.code, { children: "sheetPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The dimension that is loaded into the "sheet" portal in CasualOS.\nOnly available on the config bot." }), "\n", _jsx(_components.h3, { id: "systemportal", children: _jsx(_components.code, { children: "systemPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The search value that is loaded into the ", _jsx(GlossaryRef, { term: "systemPortal", children: ""system" portal" }), " in CasualOS.\nSetting this to ", _jsx(_components.code, { children: "true" }), " will show every bot that has a ", _jsx(TagLink, { tag: "system" }), " tag in the system portal.\nOnly available on the config bot."] }), "\n", _jsx(_components.h3, { id: "systemtagname", children: _jsx(_components.code, { children: "systemTagName" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The name of the tag that should be used when showing bots in the ", _jsx(GlossaryRef, { term: "systemPortal", children: "systemPortal" }), ".\nFor example, setting ", _jsx(TagLink, { tag: "systemTagName" }), " on the configBot to "test" will cause the systemPortal to only show bots that have a "test" tag instead of a "system" tag."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-108", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The "system" tag is used. (Default)" }) }), _jsx(PossibleValue, { value: "Any String", children: _jsx(_components.p, { children: "The given tag is used." }) })] }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h4, { id: "examples-9", children: "Examples" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsx(_components.li, { children: "Use the "myCustomSystem" tag for the systemPortal instead of the "system" tag." }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", children: "configBot.tags.systemPortalTagName = "myCustomSystem";\n" }) }), "\n", _jsx(_components.h3, { id: "systemportalbot", children: _jsx(_components.code, { children: "systemPortalBot" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The ID of the bot that is selected in the ", _jsx(GlossaryRef, { term: "systemPortal", children: "systemPortal" }), ".\nOnly available on the config bot."] }), "\n", _jsx(_components.h3, { id: "systemportaltag", children: _jsx(_components.code, { children: "systemPortalTag" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The name of the tag that is selected in the ", _jsx(GlossaryRef, { term: "systemPortal", children: "systemPortal" }), "."] }), "\n", _jsxs(_components.p, { children: ["Defaults to ", _jsx(_components.code, { children: "system" }), "."] }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h3, { id: "systemportaltagspace", children: _jsx(_components.code, { children: "systemPortalTagSpace" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The space of the tag that is selected in the ", _jsx(GlossaryRef, { term: "systemPortal", children: "systemPortal" }), ".\nIf null, then the tag space is the same as the ", _jsx(TagLink, { tag: "systemPortalBot" }), " space.\nOnly available on the config bot."] }), "\n", _jsx(_components.h3, { id: "systemportalsearch", children: _jsx(_components.code, { children: "systemPortalSearch" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The value that should be used to search across all the tags in all the bots in the inst.\nThe results of the search will be displayed in the ", _jsx(GlossaryRef, { term: "systemPortal", children: "systemPortal" }), ".\nOnly available on the config bot."] }), "\n", _jsx(_components.h3, { id: "systemportaldiff", children: _jsx(_components.code, { children: "systemPortalDiff" }) }), "\n", _jsxs(_components.p, { children: ["The name of the tag should be used as a second system portal to compare with the tag specified by the ", _jsx(TagLink, { tag: "systemPortalTag" }), " (", _jsx(_components.code, { children: "system" }), " by default)."] }), "\n", _jsxs(_components.p, { children: ["If both the ", _jsx(TagLink, { tag: "systemPortal" }), " and ", _jsx(TagLink, { tag: "systemPortalDiff" }), " tags are specified, then the system portal will be shown comparing\nbots whose system matches."] }), "\n", _jsxs(_components.p, { children: ["For example, if ", _jsx(_components.code, { children: "#systemPortal" }), " is set to ", _jsx(_components.code, { children: "true" }), " and ", _jsx(_components.code, { children: "#systemPortalDiff" }), " is set to ", _jsx(_components.code, { children: "history" }), ", then a Bot that has ", _jsx(_components.code, { children: "#system" }), " set to ", _jsx(_components.code, { children: "my.system" }), " will be compared with another bot that has ", _jsx(_components.code, { children: "#history" }), " set to ", _jsx(_components.code, { children: "my.system" }), ".\nThe result of this comparision will be shown in the system portal, indicating what was changed between the two bots."] }), "\n", _jsx(_components.h3, { id: "systemportaldiffbot", children: _jsx(_components.code, { children: "systemPortalDiffBot" }) }), "\n", _jsx(_components.p, { children: "The ID of the bot that is currently selected in the system portal diff.\nOnly available on the config bot." }), "\n", _jsx(_components.h3, { id: "systemportaldifftag", children: _jsx(_components.code, { children: "systemPortalDiffTag" }) }), "\n", _jsx(_components.p, { children: "The name of the tag that is currently selected in the system portal diff.\nOnly available on the config bot." }), "\n", _jsx(_components.h3, { id: "systemportaldifftagspace", children: _jsx(_components.code, { children: "systemPortalDiffTagSpace" }) }), "\n", _jsxs(_components.p, { children: ["The space of the tag that is selected in the system portal diff.\nIf null, then the tag space is the same as the ", _jsx(TagLink, { tag: "systemPortalDiffBot" }), " space.\nOnly available on the config bot."] }), "\n", _jsx(_components.h3, { id: "systemportalpane", children: _jsx(_components.code, { children: "systemPortalPane" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The pane that the user is currently viewing in the system portal." }), "\n", _jsx(_components.h4, { id: "possible-values-are-109", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The system portal figures out which pane to show based on the other system portal tags. (Default)" }) }), _jsx(PossibleValue, { value: "bots", children: _jsx(_components.p, { children: "The "bots" pane is shown." }) }), _jsx(PossibleValue, { value: "sheet", children: _jsx(_components.p, { children: "The "sheet" pane is shown." }) }), _jsx(PossibleValue, { value: "search", children: _jsx(_components.p, { children: "The "search" pane is shown." }) }), _jsx(PossibleValue, { value: "diff", children: _jsx(_components.p, { children: "The "diff" pane is shown." }) })] }), "\n", _jsx(_components.h3, { id: "ideportal", children: _jsx(_components.code, { children: "idePortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The prefix that indicates which tags should be loaded into the "IDE" portal in CasualOS.\nOnly available on the config bot." }), "\n", _jsx(_components.h3, { id: "mapportal", children: _jsx(_components.code, { children: "mapPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The dimension that is loaded into the ", _jsx(GlossaryRef, { term: "mapPortal", children: ""map" portal" }), " in CasualOS."] }), "\n", _jsx(_components.p, { children: "The map portal displays a 3D globe representing earth. Bots represented in the map portal use longitude for X and latitude for Y and are 10 meters by 10 meters large by default." }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h3, { id: "minimapportal", children: _jsx(_components.code, { children: "miniMapPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The dimension that is loaded into the "mini map" portal in CasualOS." }), "\n", _jsx(_components.p, { children: "The mini map portal displays a 3D globe representing earth. Bots represented in the mini map portal use longitude for X and latitude for Y and are 10 meters by 10 meters large by default." }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h3, { id: "menuportal", children: _jsx(_components.code, { children: "menuPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The dimension that is loaded into the "menu" portal in CasualOS.\nOnly available on the config bot." }), "\n", _jsx(_components.h3, { id: "leftwristportal", children: _jsx(_components.code, { children: "leftWristPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The dimension that is loaded onto the left controller near the wrist when in VR.\nOnly available on the config bot." }), "\n", _jsx(_components.h3, { id: "rightwristportal", children: _jsx(_components.code, { children: "rightWristPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The dimension that is loaded onto the right controller near the wrist when in VR.\nOnly available on the config bot." }), "\n", _jsx(_components.h3, { id: "meetportal", children: _jsx(_components.code, { children: "meetPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The ", _jsx(_components.a, { href: "https://meet.jit.si/", children: "Jitsi Meet" }), " room code of the meeting that should be joined.\nThis will join the current tab to the meeting and provide audiovisual communication between everyone that is joined."] }), "\n", _jsxs(_components.p, { children: ["This is similar to a Skype or Zoom call except that all data is encrypted and is deleted once you are done with it. Check out the Jitsi Meet privacy policy ", _jsx(_components.a, { href: "https://jitsi.org/meet-jit-si-privacy/", children: "here" }), "."] }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h3, { id: "botportal", children: _jsx(_components.code, { children: "botPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The ID of the bot whose data should be shown in the bot portal.\nThis will show the raw JSON data of the bot in a raw text portal." }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", metastring: "title='Open the botPortal for the current bot'", children: "configBot.tags.botPortal = thisBot.id;\n" }) }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", metastring: "title='Open the botPortal along the top of the screen'", children: "configBot.tags.botPortal = thisBot.id;\nbotPortalBot.tags.botPortalAnchorPoint = 'top';\n" }) }), "\n", _jsx(_components.h3, { id: "tagportal", children: _jsx(_components.code, { children: "tagPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The Bot ID and tag that should be edited in the tag portal.\nThis will show just the code editor without the rest of the sheet and makes it possible to edit just a single tag at a time." }), "\n", _jsx(_components.p, { children: "When you are setting the tag portal, you should format it so the bot ID and tag name are separated by a single period (.)." }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h4, { id: "examples-10", children: "Examples:" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsxs(_components.li, { children: ["Open the tag portal for the ", _jsx(_components.code, { children: "abc" }), " tag on the config bot."] }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", children: "const tag = "abc";\nconfigBot.tags.tagPortal = getID(configBot) + "." + tag;\n" }) }), "\n", _jsx(_components.h3, { id: "tagportalspace", children: _jsx(_components.code, { children: "tagPortalSpace" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The space of the tag mask that should be edited in the tag portal.\nIf not set, then the tag on the bot will be edited.\nIf set, then the tag mask in the given space will be edited." }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h4, { id: "examples-11", children: "Examples:" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsxs(_components.li, { children: ["Open the tag portal for the ", _jsx(_components.code, { children: "abc" }), " tag mask in the ", _jsx(_components.code, { children: "tempLocal" }), " space on the config bot."] }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", children: "const tag = "abc";\nconfigBot.tags.tagPortal = getID(configBot) + "." + tag;\nconfigBot.tags.tagPortalSpace = "tempLocal";\n" }) }), "\n", _jsx(_components.h3, { id: "codetoolsportal", children: _jsx(_components.code, { children: "codeToolsPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The dimension of bots that should be shown in the multi-line editor toolbar. This is useful for displaying small buttons that are easy to access while writing code." }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h4, { id: "examples-12", children: "Examples:" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsxs(_components.li, { children: ["Open the codeToolsPortal to the ", _jsx(_components.code, { children: "home" }), " dimension."] }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { className: "language-typescript", children: "configBot.tags.codeToolsPortal = 'home';\n" }) }), "\n", _jsx(_components.h3, { id: "imuportal", children: _jsx(_components.code, { children: "imuPortal" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["Determines if the IMU portal should be constantly reading IMU (inertial measurement unit) data for the device.\nWhen set to ", _jsx(_components.code, { children: "true" }), ", CasualOS will start updating the ", _jsx(_components.code, { children: "imuPortalBot" }), " with the data from the IMU."] }), "\n", _jsx(_components.p, { children: "Note that not all devices support the IMU portal. In particular, laptops and desktop computers will likely not support the IMU portal while mobile devices probably will." }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h3, { id: "dataportal", children: _jsx(_components.code, { children: "dataPortal" }) }), "\n", _jsx(_components.p, { children: "The data portal is a special portal that can be used in a web request to get bot data directly from the inst.\nSimilar to webhooks, you specify the inst and data portal in the query string of the URL." }), "\n", _jsx(_components.p, { children: "If given a bot ID, then the bot will be returned as JSON." }), "\n", _jsx(_components.p, { children: "If no bot matches the given value, then it will be treated as a tag and all the values for the given tag will be returned." }), "\n", _jsxs(_components.p, { children: ["If the tag ends with a common extension (like ", _jsx(_components.code, { children: ".html" }), " or ", _jsx(_components.code, { children: ".txt" }), " or ", _jsx(_components.code, { children: ".json" }), "), then the returned data will be ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type", children: "tagged" }), " with the corresponding ", _jsx(_components.a, { href: "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types", children: "MIME type" }), ".\nThis will let web browsers and other common software know what type of data they are dealing with and handle it correctly. (i.e. display a webpage)\nAlternatively, you can specify the ", _jsx(_components.code, { children: "dataPortalContentType" }), " query parameter to override the default content type."] }), "\n", _jsx(_components.p, { children: "If there is only one tag and it ends with an extension like specified above then the content directly from the tag will be returned." }), "\n", _jsx(_components.h4, { id: "examples-13", children: "Examples:" }), "\n", _jsxs(_components.ol, { children: ["\n", _jsx(_components.li, { children: "Request the JSON of the Bot with the given ID:" }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { children: "https://auxplayer.org?inst=my-aux&dataPortal=bf68e5cc-993b-42fd-a142-a23de6d2cdcb\n" }) }), "\n", _jsxs(_components.ol, { start: "2", children: ["\n", _jsxs(_components.li, { children: ["Request all the ", _jsx(TagLink, { tag: "label" }), " tags values."] }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { children: "https://auxplayer.org?inst=my-aux&dataPortal=label\n" }) }), "\n", _jsxs(_components.ol, { start: "3", children: ["\n", _jsxs(_components.li, { children: ["Request a web page from the ", _jsx(_components.code, { children: "test.html" }), " tag."] }), "\n"] }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { children: "https://auxplayer.org?inst=my-aux&dataPortal=test.html\n" }) }), "\n", _jsx(_components.h3, { id: "mousepointerposition", children: _jsx(_components.code, { children: "mousePointerPosition" }) }), "\n", _jsx(_components.p, { children: "The 3D position of the player's mouse pointer." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#vector-tags", children: "Vectors" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "mousepointerrotation", children: _jsx(_components.code, { children: "mousePointerRotation" }) }), "\n", _jsx(_components.p, { children: "The 3D rotation of the player's mouse pointer." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#rotation-tags", children: "Rotations" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "mousepointerportal", children: _jsx(_components.code, { children: "mousePointerPortal" }) }), "\n", _jsx(_components.p, { children: "The portal that the player's mouse pointer is in." }), "\n", _jsx(_components.h3, { id: "leftpointerposition", children: _jsx(_components.code, { children: "leftPointerPosition" }) }), "\n", _jsx(_components.p, { children: "The 3D position of the player's left controller." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#vector-tags", children: "Vectors" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "leftpointerrotation", children: _jsx(_components.code, { children: "leftPointerRotation" }) }), "\n", _jsx(_components.p, { children: "The 3D rotation of the player's left controller." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#rotation-tags", children: "Rotations" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "leftpointerportal", children: _jsx(_components.code, { children: "leftPointerPortal" }) }), "\n", _jsx(_components.p, { children: "The portal that the player's left controller is in." }), "\n", _jsx(_components.h3, { id: "rightpointerposition", children: _jsx(_components.code, { children: "rightPointerPosition" }) }), "\n", _jsx(_components.p, { children: "The 3D position of the player's right controller." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#vector-tags", children: "Vectors" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "rightpointerrotation", children: _jsx(_components.code, { children: "rightPointerRotation" }) }), "\n", _jsx(_components.p, { children: "The 3D rotation of the player's right controller." }), "\n", _jsxs(_components.p, { children: ["See the documentation on ", _jsx(_components.a, { href: "#rotation-tags", children: "Rotations" }), " for more info."] }), "\n", _jsx(_components.h3, { id: "rightpointerportal", children: _jsx(_components.code, { children: "rightPointerPortal" }) }), "\n", _jsx(_components.p, { children: "The portal that the player's right controller is in." }), "\n", _jsx(_components.h3, { id: "mousepointer_left", children: _jsx(_components.code, { children: "mousePointer_left" }) }), "\n", _jsx(_components.p, { children: "The state that the left mouse button is currently in." }), "\n", _jsx(_components.h4, { id: "possible-values-are-110", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The button is not pressed. (default)" }) }), _jsx(PossibleValueCode, { value: "down", children: _jsx(_components.p, { children: "The button was just pressed." }) }), _jsx(PossibleValueCode, { value: "held", children: _jsx(_components.p, { children: "The button is being held down." }) })] }), "\n", _jsx(_components.h3, { id: "mousepointer_right", children: _jsx(_components.code, { children: "mousePointer_right" }) }), "\n", _jsx(_components.p, { children: "The state that the right mouse button is currently in." }), "\n", _jsx(_components.h4, { id: "possible-values-are-111", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The button is not pressed. (default)" }) }), _jsx(PossibleValueCode, { value: "down", children: _jsx(_components.p, { children: "The button was just pressed." }) }), _jsx(PossibleValueCode, { value: "held", children: _jsx(_components.p, { children: "The button is being held down." }) })] }), "\n", _jsx(_components.h3, { id: "mousepointer_middle", children: _jsx(_components.code, { children: "mousePointer_middle" }) }), "\n", _jsx(_components.p, { children: "The state that the middle mouse button is currently in." }), "\n", _jsx(_components.h4, { id: "possible-values-are-112", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The button is not pressed. (default)" }) }), _jsx(PossibleValueCode, { value: "down", children: _jsx(_components.p, { children: "The button was just pressed." }) }), _jsx(PossibleValueCode, { value: "held", children: _jsx(_components.p, { children: "The button is being held down." }) })] }), "\n", _jsx(_components.h3, { id: "rightpointer_primary", children: _jsx(_components.code, { children: "rightPointer_primary" }) }), "\n", _jsx(_components.p, { children: "The state that the primary button on the right controller is currently in.\nThe primary input on most contollers is the trigger button." }), "\n", _jsx(_components.h4, { id: "possible-values-are-113", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The button is not pressed. (default)" }) }), _jsx(PossibleValueCode, { value: "down", children: _jsx(_components.p, { children: "The button was just pressed." }) }), _jsx(PossibleValueCode, { value: "held", children: _jsx(_components.p, { children: "The button is being held down." }) })] }), "\n", _jsx(_components.h3, { id: "rightpointer_squeeze", children: _jsx(_components.code, { children: "rightPointer_squeeze" }) }), "\n", _jsx(_components.p, { children: "The state that the squeeze button on the right controller is currently in.\nSome controllers have buttons on the side that count as "squeezing" the controller." }), "\n", _jsx(_components.h4, { id: "possible-values-are-114", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The button is not pressed. (default)" }) }), _jsx(PossibleValueCode, { value: "down", children: _jsx(_components.p, { children: "The button was just pressed." }) }), _jsx(PossibleValueCode, { value: "held", children: _jsx(_components.p, { children: "The button is being held down." }) })] }), "\n", _jsx(_components.h3, { id: "leftpointer_primary", children: _jsx(_components.code, { children: "leftPointer_primary" }) }), "\n", _jsx(_components.p, { children: "The state that the primary button on the left controller is currently in.\nThe primary input on most contollers is the trigger button." }), "\n", _jsx(_components.h4, { id: "possible-values-are-115", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The button is not pressed. (default)" }) }), _jsx(PossibleValueCode, { value: "down", children: _jsx(_components.p, { children: "The button was just pressed." }) }), _jsx(PossibleValueCode, { value: "held", children: _jsx(_components.p, { children: "The button is being held down." }) })] }), "\n", _jsx(_components.h3, { id: "leftpointer_squeeze", children: _jsx(_components.code, { children: "leftPointer_squeeze" }) }), "\n", _jsx(_components.p, { children: "The state that the squeeze button on the left controller is currently in.\nSome controllers have buttons on the side that count as "squeezing" the controller." }), "\n", _jsx(_components.h4, { id: "possible-values-are-116", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The button is not pressed. (default)" }) }), _jsx(PossibleValueCode, { value: "down", children: _jsx(_components.p, { children: "The button was just pressed." }) }), _jsx(PossibleValueCode, { value: "held", children: _jsx(_components.p, { children: "The button is being held down." }) })] }), "\n", _jsx(_components.h3, { id: "keyboard_key", children: _jsx(components.code, { children: "keyboard[key]" }) }), "\n", _jsx(_components.p, { children: "The state that the given key on the keyboard is currently in." }), "\n", _jsx(_components.h4, { id: "possible-values-are-117", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The key is not pressed. (default)" }) }), _jsx(PossibleValueCode, { value: "down", children: _jsx(_components.p, { children: "The key was just pressed." }) }), _jsx(PossibleValueCode, { value: "held", children: _jsx(_components.p, { children: "The key is being held down." }) })] }), "\n", _jsx(_components.h3, { id: "touch_index", children: _jsx(components.code, { children: "touch[index]" }) }), "\n", _jsx(_components.p, { children: "The state that the given touch index is in." }), "\n", _jsx(_components.h4, { id: "possible-values-are-118", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "null", children: _jsx(_components.p, { children: "The touch is not pressed. (default)" }) }), _jsx(PossibleValueCode, { value: "down", children: _jsx(_components.p, { children: "The touch was just pressed." }) }), _jsx(PossibleValueCode, { value: "held", children: _jsx(_components.p, { children: "The touch is being held down." }) })] }), "\n", _jsx(_components.h3, { id: "forcesignedscripts", children: _jsx(_components.code, { children: "forceSignedScripts" }) }), "\n", _jsx(_components.p, { children: "Whether to force all shared scripts to have been signed by a certificate in order to be executed." }), "\n", _jsx(_components.p, { children: "This option only takes effect if it is set in the query string of the URL.\nAdditionally, changing the tag value has no effect." }), "\n", _jsxs(_components.p, { children: ["If the inst is loaded with ", _jsx(_components.code, { children: "forceSignedScripts" }), " set to ", _jsx(_components.code, { children: "true" }), ", then scripts will be required to be signed for the entire session."] }), "\n", _jsxs(_components.p, { children: [_jsx(_components.code, { children: "tempLocal" }), " and ", _jsx(_components.code, { children: "local" }), " spaces are exempt from this requirement."] }), "\n", _jsx(_components.h4, { id: "possible-values-are-119", children: "Possible values are:" }), "\n", _jsxs(PossibleValuesTable, { children: [_jsx(PossibleValueCode, { value: "false", children: _jsx(_components.p, { children: "Scripts do not have to be signed in order to be executed. (default)" }) }), _jsx(PossibleValueCode, { value: "true", children: _jsx(_components.p, { children: "Scripts have to be signed in order to be executed." }) })] }), "\n", _jsx(_components.h3, { id: "url", children: _jsx(_components.code, { children: "url" }) }), "\n", _jsx(_components.p, { children: "The URL that is currently specified in the tab." }), "\n", _jsx(_components.h4, { id: "possible-values-are-120", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any String", children: _jsx(_components.p, { children: "The URL that is loaded in the tab." }) }) }), "\n", _jsx(_components.h3, { id: "pagetitle", children: _jsx(_components.code, { children: "pageTitle" }) }), "\n", _jsx(_components.p, { children: "The title that should be displayed on the web browser tab." }), "\n", _jsx(_components.h4, { id: "possible-values-are-121", children: "Possible values are:" }), "\n", _jsx(PossibleValuesTable, { children: _jsx(PossibleValue, { value: "Any String", children: _jsx(_components.p, { children: "The title that should be displayed." }) }) }), "\n", _jsx(_components.h3, { id: "editingbot", children: _jsx(_components.code, { children: "editingBot" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The ID of the bot that the user is currently editing.\nOnly available on the config bot." }), "\n", _jsx(_components.h3, { id: "editingtag", children: _jsx(_components.code, { children: "editingTag" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsx(_components.p, { children: "The tag that the user is currently editing.\nOnly available on the config bot." }), "\n", _jsx(_components.h3, { id: "cursorstartindex", children: _jsx(_components.code, { children: "cursorStartIndex" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The selection start index of the player's cursor in the current ", _jsx(TagLink, { tag: "editingTag" }), "."] }), "\n", _jsxs(_components.p, { children: ["Note that when ", _jsx(TagLink, { tag: "cursorStartIndex" }), " is larger than ", _jsx(TagLink, { tag: "cursorEndIndex" }), " it means\nthat the player has selected text from the right to the left.\nThis is important because text will always be inserted at ", _jsx(TagLink, { tag: "cursorEndIndex" }), "."] }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h3, { id: "cursorendindex", children: _jsx(_components.code, { children: "cursorEndIndex" }) }), "\n", _jsx(Badges, { children: _jsx(ConfigBotBadge, {}) }), "\n", _jsxs(_components.p, { children: ["The selection end index of the player's cursor in the current ", _jsx(TagLink, { tag: "editingTag" }), "."] }), "\n", _jsxs(_components.p, { children: ["Note that when ", _jsx(TagLink, { tag: "cursorEndIndex" }), " is smaller than ", _jsx(TagLink, { tag: "cursorStartIndex" }), " it means\nthat the player has selected text from the right to the left.\nThis is important because text will always be inserted at ", _jsx(TagLink, { tag: "cursorEndIndex" }), "."] }), "\n", _jsx(_components.p, { children: "Only available on the config bot." }), "\n", _jsx(_components.h2, { id: "auth-bot-tags", children: "Auth Bot Tags" }), "\n", _jsx(_components.p, { children: "These are tags that are automatically set on the authBot." }), "\n", _jsx(_components.h3, { id: "avataraddress", children: _jsx(_components.code, { children: "avatarAddress" }) }), "\n", _jsxs(_components.p, { children: ["The address that the user's avatar mesh can be found at.\nThis can be used with ", _jsx(TagLink, { tag: "form" }), " and ", _jsx(TagLink, { tag: "formAddress" }), " to display the avatar in the bot or miniGridPortals."] }), "\n", _jsx(_components.h3, { id: "name", children: _jsx(_components.code, { children: "name" }) }), "\n", _jsx(_components.p, { children: "The name that the user specified for their account." }), "\n", _jsx(_components.h3, { id: "hasactivesubscription", children: _jsx(_components.code, { children: "hasActiveSubscription" }) }), "\n", _jsxs(_components.p, { children: ["Whether the user has an active subscription to the CasualOS Beta Program.\nOn deployments that do not support subscriptions, this is always ", _jsx(_components.code, { children: "true" }), "."] }), "\n", _jsx(_components.h3, { id: "subscriptiontier", children: _jsx(_components.code, { children: "subscriptionTier" }) }), "\n", _jsx(_components.p, { children: "The subscription tier that is currently active for the user. It is a string containing the feature level that should be active for the user." }), "\n", _jsx(_components.h3, { id: "openaikey", children: _jsx(_components.code, { children: "openAiKey" }) }), "\n", _jsx(_components.p, { children: "The OpenAI API Key that the user has configured in their profile." }), "\n", _jsx(_components.p, { children: "It has the following format:" }), "\n", _jsx(_components.pre, { children: _jsx(_components.code, { children: "vAI1.{base64OfKey}\n" }) }), "\n", _jsx(_components.h2, { id: "hidden-tags", children: "Hidden Tags" }), "\n", _jsx(_components.p, { children: "Hidden tags are tags that are hidden in the sheet by default." }), "\n", _jsx(Alert, { type: "info", children: _jsxs(_components.p, { children: ["You can make your own hidden tags by adding a ", _jsx(components.code, { children: "" }), " (underscore) to the start of the tag."] }) })] }); } export default function MDXContent(props = {}) { const {wrapper: MDXLayout} = { ..._provideComponents(), ...props.components }; return MDXLayout ? _jsx(MDXLayout, { ...props, children: _jsx(_createMdxContent, { ...props }) }) : _createMdxContent(props); }